第 4章 关系的规范理论学习要点
1、候选键、替代键和外来键
2、完全函数依赖、部分函数依赖、传递函数依赖
3,1NF,2NF和 3NF
4、关系模式的分解第 4章 关系的规范理论
4.1 关系中的键
4.2 函数依赖
4.3 规范化和范式
4.4 关系模式的分解第 4章 关系的规范理论
4.1 关系中的键在讨论关系的性质时,曾指出在任何关系中,不能有两个元组完全相同 。 确定了主键的值,就能惟一地确定一个元组 。 例如图 4-1中所示的三个关系:
P(产品号,产品名,产品型号 )
GP(零件号,零件名,零件重量,单价 )
PGP(产品号,零件号,数量 )
4.1 关系中的键关系 P的主键是产品号,关系 GP的主键是零件号,
它们均只含一个属性 。 关系 PGP的主键含有两个属性
( 产品号和零件号 ) 。 因为仅用产品号或零件号都不能确定数量,即不能惟一地识别一个元组 。 由此可知,
主键可为单个属性,也可为属性组 。 在特殊情况下,
主键可以由整个元组组成 。 例如在关系 R(演奏者,作品,听众 )中,假设一个演奏者可以演奏多个作品;某一作品可以被多个演奏者演奏;听众也可以欣赏不同演奏者的不同作品,则该关系的主键就是由整个元组组成的,称为全键 ( All-key) 。
4.1.1 候选键 ( CandidateKey)
凡在一个关系中具有主键特性的属性或属性组,均称为候选键 。 因为它们都具有被选为主键的条件,所以一个关系可能有多个候选键,
但只能选其中的一个为主键 。
候选键中包含的属性称为主属性
( Primary Attribute),其余的属性称为非主属性 ( Nonprimary Attribute) 。
4.1.1 候选键
【 例 4-1】 在职工关系 ZG(姓名,性别,年龄 )
中,增加一个属性,职工号,,即得到一个新关系:
ZG(职工号,姓名,性别,年龄 )
又假定职工号与职工姓名是一一对应的,
即没有两个职工的姓名相同,则,职工号,和
,姓名,两个属性都是候选键 。
4.1.2 替代键 ( Alternate Key)
对于某一指定的关系可能存在多个候选键,
但只能选其中的一个为主键 。 在确定主键后,
其余的候选键都是替代键,替代键在需要时可代替主键 。 在用 DDL对关系进行描述时应指明哪个是主键,哪些是替代键 。 如果仅有一个候选键,就只指明主键 。
4.1.2 替代键
【 例 4-2】 用 DDL定义职工关系 。
RELATION ZG(职工号,姓名,性别,年龄 )
PRIMARY KEY (职工号 )
ALTERNATE KEY (姓名 )
4.1.3 外来键 ( ForeignKey)
当关系中的某 ( 些 ) 属性是由另一个关系的主键构成时,则该属性 ( 或属性组 ) 称为外来键 。
【 例 4-3】 PGP(产品号,零件号,数量 )中的,产品号,和,零件号,分别来自关系 P和 GP,它们都是相应关系的主键 。 故在 PGP关系中,,产品号,和
,零件号,为外来键 。 外来键不直接在关系描述中说明,但从整个模式描述中可以间接看出 。 图 4-1中的三个关系可描述如下:
4.1.3 外来键
RELATION P(产品号,产品名,产品型号 )
PRIMARY KEY(产品号 )
RELATION GP(零件号,零件名,零件重量,
单价 )
PRIMARY KEY(零件号 )
RELATION PGP(产品号,零件号,数量 )
PRIMARY KEY(产品号,零件号 )
4.1.3 外来键末行描述的主键显然是外来键 。
在关系描述中指明关系的主键,目的是让
DBMS对送入主键的值做出必要的约束 。
DBMS一般都规定输入主键属性组的值不允许包含,空值,,因为不能用空值来识别任何元组 。 例如,在关系 PGP中,当输入一个元组时,
不论产品号还是零件号都禁止为,空,。 这一规定有时被称为,第一完整性原则,。
4.2 函数依赖关系中的元组可以用它的主键来识别,即有了主键的值,就能确定元组中其他属性的值 。 例如在例 4-
1中,职工的,职工号,确定了,其姓名,性别和年龄也随之确定了 。 因而称,职工号,为决定因素,它
,函数决定,姓名等属性的内容,而姓名等属性的内容则,函数依赖,于,职工号,,可记做:
职工号 → (姓名,性别,年龄 )
用形式化的方式表示,关系 R可以记为:
R<U,F>
4.2 函数依赖其中 U表示属性组的集合,F表示属性组间的函数依赖的集合 。 对于上述的职工关系,可以写为:
R= ZG
U= { 职工号,姓名,性别,年龄 }
F= { 职工号 → 姓名,职工号 → 性别,职工号 → 年龄 }
4.2 函数依赖函数依赖可区分为完全依赖,部分依赖和传递依赖三类 。 假设 X,Y均代表元组中的任意属性组,X '为 X的任意非空子集,且 Y不包含在
X中 ( 记做 Y?X,其中?为集合比较运算符?之反,表示,不包含于,),则上述三类依赖关系可分别定义如下:
4.2.1 完全函数依赖 ( Full Functional
Dependency)
【 定义 4-1】 若 X→ Y,X ‘→ Y(表示 Y不是函数依赖于 X ’),
则有 X f Y,即 Y完全函数依赖于 X,其中 f 表示完全函数依赖。
F 可简写成 → 。
【 例 4-4】 在关系 ZG(职工号,姓名,性别,年龄 )中,职工号
→ 姓名,职工号 → 性别,职工号 → 年龄 。 用图解表示如图 4-2
所示 。
4.2.2 部分函数依赖 ( Partial
Functional Dependency)
【 定义 4-2】 若 X→ Y,X ‘→ Y,则 X p Y,即 Y部分函数依赖于
X,其中 p 表示部分函数依赖 。
【 例 4-5】 在图 4-1的关系 PGP中增加一个属性,零件重量,,
则在新关系
PGPNEW(产品号,零件号,零件重量,数量 )
(产品号,零件号 )→ 数量零件号 → 零件重量
(产品号,零件号 ) p 零件重量
4.2.3 传递函数依赖
【 定义 4-3】 若 X Y,Y Z,但 Y→ X,则有 X t Z,
其中 t 表示传递函数依赖 。
请注意上述定义中的条件 Y→ X。 如果不加上这一限制,当 X→ Y时允许 Y→ X,则 X?Y。
而在 X?Y的条件下,Y→ Z就等于 X→ Z。 这样 X
就直接函数决定 Z,而不是通过 Y传递决定 Z了 。
4.2.3 传递函数依赖
【 例 4-6】 设有下列关系
GPD(零件号,零件名,设计人,设计人等级 )
因为零件号 → 零件名零件号 → 设计人设计人 → 设计人等级故零件号 t 设计人等级
4.3 规范化和范式规范化理论是 E.F.Codd首先提出来的 。 他认为,一个关系数据库的关系都应满足一定的规范,才能构造好的数据模式 。 下面通过一个实例介绍设计中可能会出现的问题 。
4.3.1 引例假设有如下关系模式
S(SN,CITY,PART,QTY)
其中 S是关系名,它代表供应商 ( Supplier) ;属性名 SN,CITY,PART,QTY依次代表供应商的名字
( Supplier Name),供应商所在的城市,供应商所供应的零件和零件的数量 。 现假定供应商的名字是互不相同的,即不具有重名,各种不同的零件不具有相同的名字 。
4.3.1 引例图 4-5(a)表示这个关系模式的一个可能的具体关系 。 该关系存在以下问题 。
( 1) 冗余大
( 2) 插入异常
( 3) 删除异常
4.3.2 1NF,2NF和 3NF
【 定义 4-4】 如果一个关系 R的每一分量都是不可分的数据项,则称 R是第一范式的,记做 R∈ 1NF。
这一限制是在关系的基本性质中提出来的,任何关系都必须遵守 。
【 定义 4-5】 若 R∈ 1NF,且它的每一非主属性完全依赖于主键,则 R∈ 2NF。
【 定义 4-6】 若 R∈ 2NF,且每一非主属性不传递依赖于主键,则 R∈ 3NF。
4.3.2 1NF,2NF和 3NF
[例 4-7] 求关系 S(学号,姓名,班级,班主任,课程号,成绩 )的范式等级 。
为了分析方便,写出关系的表示式后,可以在主属性下方划一横线,并用箭头标出属性之间的依赖关系 。
分析 S(学号,课程号,姓名,班级,班主任,成绩 )
(1)各分量都是原子的 。
(2)存在部分函数依赖 (学号,课程号 )→ 姓名及传递依赖等 。
结论,S∈ 1NF
4.3.2 1NF,2NF和 3NF
[例 4-8] 求关系 S1的范式等级 。
分析
S1(学号,姓名,班级,班主任 )
(1)各分量全是原子的 。
(2)主键为单个属性,不可能存在部分函数依赖 。
(3)存在传递函数依赖 。 即学号 t 班主任 (因为学号 →
班级,班级 → 班主任 )。
结论,S1∈ 2NF
4.3.2 1NF,2NF和 3NF
[例 4-9] 求关系 S2,CL与 SC的范式等级 。
分析 S2(学号,姓名,班级 )
CL(班级,班主任 )
SC(学号,课程号,成绩 )
显然,上述三个关系都只有完全函数依赖,不存在部分依赖和传递依赖,故均属于 3NF。
4.3.2 1NF,2NF和 3NF
从第 一范式到第三 范式,其过程 可以表示为,
1NF→ 2NF→ 3NF
在一般情况下,3NF关系排除了非主属性对于主键的部分函数依赖和传递函数依赖,把能够分离的属性尽可能分解为单独的关系了,满足 3NF的关系已能够清除数据冗余和各种异常 。 但对于具有几个复合候选键,键内属性有一部分互相覆盖的关系时,仅满足
3NF的条件仍可能发生异常,应进一步用 BCNF的条件去限制它 。
4.4 关系模式的分解分解是提高关系范式等级的重要方法 。
综上所述,可以帮助我们选择正确的分解方案 。 对关系模式的分解,不能仅着眼于提高它的范式等级,还应遵守无损分解和分解后的新关系相互独立等原则 。 只有兼顾到各方面的要求,才能保证分解的质量 。
4.4 关系模式的分解有些模式在理论上存在冗余或异常,实际应用中不一定有什么影响 。 例如有些模式在运行中只有查询操作,没有插入,删除等操作,
就不必担心发生,异常,。
处理模式分解必须从实际出发,并不是范式等级越高越好 。 分解得过细,即使对消除更新异常有些好处,但查询时需要更多的连接操作,很可能是得不偿失的 。
习 题
1,选择题
( 1) 确定了 __________的值,就能惟一地确定一个元组 。
A,主键 B,外来键 C,关系 D,属性
( 2) 凡在一个关系中具有主键特性的属性或属性组,均称为 __________。
A,关系 B,候选键 C,主键 D,外来键
( 3) 对于某一指定的关系可能存在多个候选键,但只能选其中的一个为
__________。
A,替代键 B,候选键 C,主键 D,关系
( 4) 当关系中的某属性是由另一个关系的主键构成时,则该属性为
__________。
A,主键 B,替代键 C,候选键 D,外来键
( 5) 规范化理论是 __________首先提出来的 。
A,Microsoft B,冯,诺依曼 C,IBM D,E.F.Codd
习 题
2,填空题
( 1) __________可为单个属性,也可为属性组 。
( 2) 候选键中包含的属性称为 __________,其余的属性称为
__________。
( 3 ) 在一个关系中确定主键后,其余的候选键即是
__________,__________在需要时可代替主键 。
( 4 ) 函数依赖可区分为 __________,__________ 和
__________三类 。
( 5) E.F.Codd把关系模式中应满足的规范要求分成几级,每一级称为一个 __________。 实际的数据库系统一般都使用
__________以上的关系 。
( 6) 满足 __________的关系已能清除数据冗余和各种异常 。
参考答案
1( 1) A( 2) B( 3) C( 4) D( 5) D
2( 1)主键
( 2)主属性、非主属性
( 3)替代键、替代键
( 4)完全函数依赖、部分函数依赖、传递函数依赖
( 5)范式、第三范式 ( 6) 3NF