我对数据字典的理解
一、概念
数据字典有两种形式
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
这样的话,每个职员可以拥有不同数量的属性。