多级代码数据字典表设计
1. 要求:
- 编码长度改变:如一级学科变成3位
- 编码方式改变:增加4级学科、将门类与一级学科合并
- 代码有效期改变:如某个二级学科从2010年10月1日开始不在使用
- 代码被覆盖或替换
- 要求保留原信息
2. 设计表如下:
- 学科门类表
字段名 | 数据类型 | 允许空值 | 主/外键 | 描述 |
---|---|---|---|---|
id | varchar(20) | not null | PK | 学科门类代号 |
name | varchar(50) | not null | 学科门类名称 | |
startDate | date | not null | 该学科生效时间 | |
endDate | date | 该学科失效时间 |
- 各级学科表
字段名 | 数据类型 | 允许空值 | 主/外键 | 描述 |
---|---|---|---|---|
id | varchar(20) | not null | PK | 学科门类代号 |
name | varchar(50) | not null | 学科门类名称 | |
level | int | not null | 学科层次:1、2、3 | |
fatherID | varchar(20) | not null | FK | 上级学科表 |
startDate | date | not null | 该学科生效时间 | |
endDate | date | 该学科失效时间 |
3. 图示:
4. 分析
- 编码长度改变:如一级学科变成3位,各级学科的id均为varchar(20),满足长度改变要求,另外在改变该学科的编码长度时,应该递归的改变所有子学科的编码。即如08变为108,那么0811、0812、0813均要变为10811、10812、10813
- 编码方式改变:如增加4级学科、将门类与一级学科合并,对于增加学科只须增加对应层次的学科表即可,即可创建一个level为4的学科。
- 代码有效期改变:如某个二级学科从2010年10月1日开始不在使用,只须在endDate添加结束日期即可。
- 代码被覆盖或替换:类似与1中长度改变,递归改变学科及其子学科的id。
- 要求保留原信息:对于删除部分学科,只须添加结束日期即表示已经过期不再访问,但原始信息仍保留在系统中。