一、概念

数据字典有两种形式

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

这样的话,每个职员可以拥有不同数量的属性。