Files
hzdyjs/docs/设计文档/database/学工管理-学生信息管理/20-college-major-dict-solution.sql
T
2025-07-19 10:18:27 +08:00

208 lines
10 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ==========================================
-- 基于字典表的学院专业管理方案
-- 版本:V1.0.0
-- 创建时间:2025-01-22
-- 说明:利用现有sys_dict_data表管理学院和专业信息
-- 优势:快速实现,无需修改现有表结构
-- 劣势:功能有限,不支持复杂的业务逻辑
-- ==========================================
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ===========================================
-- 1. 创建学院字典类型
-- ===========================================
INSERT INTO `sys_dict_type` (
`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `status`, `remark`,
`create_by`, `create_time`, `update_by`, `update_time`
) VALUES (
1001, '000000', '学院信息', 'xg_college', '0', '学院代码和名称字典',
1, NOW(), 1, NOW()
) ON DUPLICATE KEY UPDATE dict_name = VALUES(dict_name);
-- ===========================================
-- 2. 创建专业字典类型
-- ===========================================
INSERT INTO `sys_dict_type` (
`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `status`, `remark`,
`create_by`, `create_time`, `update_by`, `update_time`
) VALUES (
1002, '000000', '专业信息', 'xg_major', '0', '专业代码和名称字典',
1, NOW(), 1, NOW()
) ON DUPLICATE KEY UPDATE dict_name = VALUES(dict_name);
-- ===========================================
-- 3. 插入学院字典数据
-- ===========================================
INSERT INTO `sys_dict_data` (
`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`,
`css_class`, `list_class`, `is_default`, `status`, `remark`,
`create_by`, `create_time`, `update_by`, `update_time`
) VALUES
-- 学院数据
(2001, '000000', 1, '计算机科学与技术学院', 'CS', 'xg_college', '', 'primary', 'N', '0', '计算机科学与技术学院', 1, NOW(), 1, NOW()),
(2002, '000000', 2, '电子信息工程学院', 'EE', 'xg_college', '', 'success', 'N', '0', '电子信息工程学院', 1, NOW(), 1, NOW()),
(2003, '000000', 3, '机械工程学院', 'ME', 'xg_college', '', 'info', 'N', '0', '机械工程学院', 1, NOW(), 1, NOW()),
(2004, '000000', 4, '经济管理学院', 'EC', 'xg_college', '', 'warning', 'N', '0', '经济管理学院', 1, NOW(), 1, NOW()),
(2005, '000000', 5, '文理学院', 'LA', 'xg_college', '', 'danger', 'N', '0', '文理学院', 1, NOW(), 1, NOW())
ON DUPLICATE KEY UPDATE
dict_label = VALUES(dict_label),
dict_sort = VALUES(dict_sort),
update_time = VALUES(update_time);
-- ===========================================
-- 4. 插入专业字典数据
-- ===========================================
INSERT INTO `sys_dict_data` (
`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`,
`css_class`, `list_class`, `is_default`, `status`, `remark`,
`create_by`, `create_time`, `update_by`, `update_time`
) VALUES
-- 计算机科学与技术学院专业
(3001, '000000', 1, '计算机科学与技术', 'CS001', 'xg_major', '', 'primary', 'N', '0', '计算机科学与技术学院-计算机科学与技术专业', 1, NOW(), 1, NOW()),
(3002, '000000', 2, '软件工程', 'CS002', 'xg_major', '', 'primary', 'N', '0', '计算机科学与技术学院-软件工程专业', 1, NOW(), 1, NOW()),
(3003, '000000', 3, '网络工程', 'CS003', 'xg_major', '', 'primary', 'N', '0', '计算机科学与技术学院-网络工程专业', 1, NOW(), 1, NOW()),
-- 电子信息工程学院专业
(3004, '000000', 4, '电子信息工程', 'EE001', 'xg_major', '', 'success', 'N', '0', '电子信息工程学院-电子信息工程专业', 1, NOW(), 1, NOW()),
(3005, '000000', 5, '通信工程', 'EE002', 'xg_major', '', 'success', 'N', '0', '电子信息工程学院-通信工程专业', 1, NOW(), 1, NOW()),
(3006, '000000', 6, '自动化', 'EE003', 'xg_major', '', 'success', 'N', '0', '电子信息工程学院-自动化专业', 1, NOW(), 1, NOW()),
-- 机械工程学院专业
(3007, '000000', 7, '机械设计制造及其自动化', 'ME001', 'xg_major', '', 'info', 'N', '0', '机械工程学院-机械设计制造及其自动化专业', 1, NOW(), 1, NOW()),
(3008, '000000', 8, '机械电子工程', 'ME002', 'xg_major', '', 'info', 'N', '0', '机械工程学院-机械电子工程专业', 1, NOW(), 1, NOW()),
-- 经济管理学院专业
(3009, '000000', 9, '工商管理', 'EC001', 'xg_major', '', 'warning', 'N', '0', '经济管理学院-工商管理专业', 1, NOW(), 1, NOW()),
(3010, '000000', 10, '会计学', 'EC002', 'xg_major', '', 'warning', 'N', '0', '经济管理学院-会计学专业', 1, NOW(), 1, NOW()),
-- 文理学院专业
(3011, '000000', 11, '汉语言文学', 'LA001', 'xg_major', '', 'danger', 'N', '0', '文理学院-汉语言文学专业', 1, NOW(), 1, NOW()),
(3012, '000000', 12, '英语', 'LA002', 'xg_major', '', 'danger', 'N', '0', '文理学院-英语专业', 1, NOW(), 1, NOW())
ON DUPLICATE KEY UPDATE
dict_label = VALUES(dict_label),
dict_sort = VALUES(dict_sort),
update_time = VALUES(update_time);
-- ===========================================
-- 5. 创建学院专业关联扩展字典
-- ===========================================
INSERT INTO `sys_dict_type` (
`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `status`, `remark`,
`create_by`, `create_time`, `update_by`, `update_time`
) VALUES (
1003, '000000', '学院专业关联', 'xg_college_major', '0', '学院和专业的关联关系',
1, NOW(), 1, NOW()
) ON DUPLICATE KEY UPDATE dict_name = VALUES(dict_name);
-- 插入学院专业关联数据(格式:学院代码-专业代码)
INSERT INTO `sys_dict_data` (
`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`,
`css_class`, `list_class`, `is_default`, `status`, `remark`,
`create_by`, `create_time`, `update_by`, `update_time`
) VALUES
(4001, '000000', 1, 'CS-CS001', 'CS-CS001', 'xg_college_major', '', 'primary', 'N', '0', '计算机科学与技术学院-计算机科学与技术', 1, NOW(), 1, NOW()),
(4002, '000000', 2, 'CS-CS002', 'CS-CS002', 'xg_college_major', '', 'primary', 'N', '0', '计算机科学与技术学院-软件工程', 1, NOW(), 1, NOW()),
(4003, '000000', 3, 'CS-CS003', 'CS-CS003', 'xg_college_major', '', 'primary', 'N', '0', '计算机科学与技术学院-网络工程', 1, NOW(), 1, NOW()),
(4004, '000000', 4, 'EE-EE001', 'EE-EE001', 'xg_college_major', '', 'success', 'N', '0', '电子信息工程学院-电子信息工程', 1, NOW(), 1, NOW()),
(4005, '000000', 5, 'EE-EE002', 'EE-EE002', 'xg_college_major', '', 'success', 'N', '0', '电子信息工程学院-通信工程', 1, NOW(), 1, NOW()),
(4006, '000000', 6, 'EE-EE003', 'EE-EE003', 'xg_college_major', '', 'success', 'N', '0', '电子信息工程学院-自动化', 1, NOW(), 1, NOW()),
(4007, '000000', 7, 'ME-ME001', 'ME-ME001', 'xg_college_major', '', 'info', 'N', '0', '机械工程学院-机械设计制造及其自动化', 1, NOW(), 1, NOW()),
(4008, '000000', 8, 'ME-ME002', 'ME-ME002', 'xg_college_major', '', 'info', 'N', '0', '机械工程学院-机械电子工程', 1, NOW(), 1, NOW()),
(4009, '000000', 9, 'EC-EC001', 'EC-EC001', 'xg_college_major', '', 'warning', 'N', '0', '经济管理学院-工商管理', 1, NOW(), 1, NOW()),
(4010, '000000', 10, 'EC-EC002', 'EC-EC002', 'xg_college_major', '', 'warning', 'N', '0', '经济管理学院-会计学', 1, NOW(), 1, NOW()),
(4011, '000000', 11, 'LA-LA001', 'LA-LA001', 'xg_college_major', '', 'danger', 'N', '0', '文理学院-汉语言文学', 1, NOW(), 1, NOW()),
(4012, '000000', 12, 'LA-LA002', 'LA-LA002', 'xg_college_major', '', 'danger', 'N', '0', '文理学院-英语', 1, NOW(), 1, NOW())
ON DUPLICATE KEY UPDATE
dict_label = VALUES(dict_label),
dict_sort = VALUES(dict_sort),
update_time = VALUES(update_time);
-- ===========================================
-- 6. 创建查询视图(兼容现有系统)
-- ===========================================
-- 学院选项查询视图
CREATE OR REPLACE VIEW v_dict_college_options AS
SELECT
dict_value as value,
dict_label as label,
dict_sort as sort_order,
status,
remark
FROM sys_dict_data
WHERE dict_type = 'xg_college' AND status = '0'
ORDER BY dict_sort;
-- 专业选项查询视图
CREATE OR REPLACE VIEW v_dict_major_options AS
SELECT
dict_value as value,
dict_label as label,
dict_sort as sort_order,
status,
remark
FROM sys_dict_data
WHERE dict_type = 'xg_major' AND status = '0'
ORDER BY dict_sort;
-- 学院专业关联查询视图
CREATE OR REPLACE VIEW v_dict_college_major_relation AS
SELECT
SUBSTRING_INDEX(dict_value, '-', 1) as college_code,
SUBSTRING_INDEX(dict_value, '-', -1) as major_code,
c.dict_label as college_name,
m.dict_label as major_name,
cm.dict_sort as sort_order
FROM sys_dict_data cm
LEFT JOIN sys_dict_data c ON c.dict_value = SUBSTRING_INDEX(cm.dict_value, '-', 1) AND c.dict_type = 'xg_college'
LEFT JOIN sys_dict_data m ON m.dict_value = SUBSTRING_INDEX(cm.dict_value, '-', -1) AND m.dict_type = 'xg_major'
WHERE cm.dict_type = 'xg_college_major' AND cm.status = '0'
ORDER BY cm.dict_sort;
-- 恢复外键检查
SET FOREIGN_KEY_CHECKS = 1;
-- ===========================================
-- 7. 使用示例查询
-- ===========================================
-- 查询所有学院
-- SELECT * FROM v_dict_college_options;
-- 查询所有专业
-- SELECT * FROM v_dict_major_options;
-- 查询学院专业关联关系
-- SELECT * FROM v_dict_college_major_relation;
-- 根据学院代码查询专业
-- SELECT major_code, major_name FROM v_dict_college_major_relation WHERE college_code = 'CS';
-- 根据专业代码查询学院
-- SELECT college_code, college_name FROM v_dict_college_major_relation WHERE major_code = 'CS001';
-- 说明文档
-- 本方案基于现有的sys_dict_data表实现学院和专业管理,具有以下特点:
--
-- 优势:
-- 1. 快速实现:无需修改现有表结构,利用现有字典系统
-- 2. 兼容性好:与现有系统完全兼容
-- 3. 管理便捷:可通过系统字典管理界面进行维护
-- 4. 查询简单:提供了便捷的查询视图
--
-- 劣势:
-- 1. 功能有限:无法存储复杂的业务属性
-- 2. 扩展性差:不支持层级结构和复杂关联
-- 3. 性能一般:大量数据时查询性能较差
-- 4. 维护困难:关联关系需要手动维护
--
-- 适用场景:
-- 1. 快速原型开发
-- 2. 简单的学院专业管理需求
-- 3. 现有系统的临时解决方案
-- 4. 数据量不大的场景
--
-- 建议:
-- 如果业务需求复杂,建议采用独立表方案(19-college-major-tables.sql)