一、概念
数据字典有两种形式
1. 把主体的属性代码化放入独立的表中,不是和主体放在一起,主体中只保留属性的代码。这里属性的数量是不变的,而属性取值的数量可以是变化的。
2. 用一个表来放结构相同的所有属性信息,不同属性的不同取值统一编码,用“类型”来区别不同的属性,主体中保留属性代码的列表。这样主体所拥有的属性数量就是可变的了。
第二种数据字典比第一种更抽象,层级更高,也更具一般性、通用性。
二、实例说明
一张职员表,包括:姓名,国籍,证件,学历。
国籍包括:中国,美国,日本
证件包括:身份证,驾驶证
学历包括:博士,硕士,本科,大专
三、第一种形式的数据字典
最终目标是职员表,每个职员的每个属性都有固定的内容,例如:一个职员的国籍只能是:中国、美国、日本这3个。所以,把每个属性都设计成一张表,在职员表中只要引用每个属性表中的ID即可。
1. 一张国籍表
国籍ID | 国籍名称 |
001 | 中国 |
002 | 美国 |
003 | 日本 |
2. 一张证件表
证件ID | 证件名称 |
001 | 身份证 |
002 | 驾驶证 |
3.一张学历表
学历ID | 学历名称 |
001 | 博士 |
002 | 硕士 |
003 | 本科 |
004 | 大专 |
4. 职员表
职员ID | 姓名 | 国籍 | 证件 | 学历 |
2001 | 张三 | 001 | 001 | 002 |
2002 | 李四 | 003 | 002 | 004 |
优点:每个属性表中可以动态修改。
缺点:在查询职员时,需要很多个表进行联表查询。如果属性很多时,不方便扩展。
二、第二种形式的数据字典
观察上面的属性,有一个共性:只有2个字段,第一个字段是标识,第二个字段是内容。
所以,可以把这些属性放在一张表中:
1. 属性表
标识 | 分类 | 内容 |
001 | contry | 中国 |
002 | contry | 美国 |
003 | contry | 日本 |
101 | identify | 身份证 |
102 | identify | 驾驶证 |
201 | education | 博士 |
202 | education | 硕士 |
203 | education | 本科 |
304 | education | 大专 |
2. 职员表
职员ID | 姓名 | 国籍 | 证件 | 学历 |
2001 | 张三 | 001 | 101 | 202 |
2002 | 李四 | 003 | 102 | 304 |
优点:只有一张属性表。
如果想查询所有的国籍,只要查询属性表中的“分类”=“contry”即可。
三、上面的职员表还有一个缺点,就是每个职员的属性字段是固定的。
假如:一个职员可能有很多属性,另一个职员只有很少属性,就存在空间的浪费。
因此,可以把职员表拆成2张表:
1.职员表
职员ID | 姓名 |
2001 | 张三 |
2002 | 李四 |
2.属性表
职员ID | 属性标识 |
2001 | 001 |
2001 | 101 |
2001 | 202 |
2002 | 003 |
2002 | 102 |
2002 | 304 |
职员ID为 2001的,拥有3个属性,分别是:001,101,202
职员ID为2002的,拥有3个属性,分别是:003,102,304
这样的话,每个职员可以拥有不同数量的属性。