第6章 关系数据理论 习题6

(一)大家根据自己了解的、所使用的、所设计的数据库系统,举例说明以下术语的定义(可查阅相关材料),要求理解并熟练掌握。

1、函数依赖
设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意。一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等则称“X 函数确定Y”或“Y 函数依赖于X”,记作X→Y。X称为这个函数依赖的决定属性组,也称为决定因素。
函数依赖不是指关系模式R的某个或某些关系实例r满足的约束条件,而是指R的所有关系实例r均要满足的约束条件。
函数依赖是语义范畴的概念。只能根据数据的语义来确定函数依赖。
函数依赖是指关系模式R在任何时刻的关系实例均要满足的约束条件。
【例】:在关系模式Student中Sno是主码:
则Sno→Sname, Sno→Ssex, Sno→Sage, Sno→Sdept
如果要求“学生不允许有重名”,那么函数依赖Sname→Sno、Sname→Ssex、Sname→Sage、Sname→Sdept也成立。
2、平凡的函数依赖
X函数确定Y(X→Y),但X包含Y,则称X→Y是平凡的函数依赖。
【例】在关系SC(Sno,Cno,Grade)中,Sno和Cno为码:
(Sno,Cno)→Sno, (Sno,Cno)→Cno为平凡的函数依赖。
3、非平凡的函数依赖
X函数确定Y(X→Y),且X不包含Y,则称X→Y是平凡的函数依赖。
【例】在关系SC(Sno,Cno,Grade)中,Sno和Cno为码:
(Sno,Cno)→Grade为非平凡的函数依赖。
4、部分函数依赖
在关系模式R(U)中,如果X→Y,并且存在X的一个真子集X0,使得X0→Y,则称Y对X部分函数依赖。
【例】在关系STUDENT(Sno,Sdept,Mname,Cno,Grade)中:
(Sno,Cno)→Sdept是部分函数依赖,因为只需Sno就能确定Sdept,即Sno→Sdept.
5、完全函数依赖
完全函数依赖在一个关系中,若某个非主属性数据项依赖于全部关键字称之为完全函数依赖。
【例】在关系STUDENT(Sno,Sdept,Mname,Cno,Grade)中:
(Sno,Cno)→Grade是完全函数依赖,因为在(Sno,Cno)中,任一个都不能确定Grade,只有Sno和Cno两个共同确定Grade.
6、传递函数依赖
在关系模式R(U)中,设X,Y,Z是U的不同的属性子集,如果X确定Y、Y确定Z,且有X不包含Y,Y不确定X,Y不包含Z,则称Z对X传递函数依赖。
【例】在关系STUDENT(Sno,Sdept,Mname,Cno,Grade)中:
(Sno,Cno),Sdept,Mname是STUDENT的不同的属性子集,(Sno,Cno)确定Sdept,Sdept确定Mname,且(Sno,Cno)不包含Sdept,Sdept不确定(Sno,Cno),Sdept不包含Mname,则称Mname对(Sno,Cno)传递函数依赖,即(Sno,Cno)→Mname是传递函数依赖。
7、候选码
设K为关系模式R中的属性或属性组合。若U完全依赖于K,则K
称为R的一个候选码。
【例】在关系S(Sno,Sdept,Sage)中,Sno→(Sno,Sdept,Sage),则Sno为候选码。
在关系SC(Sno,Cno,Sdept)中,(Sno,Cno)为码。
8、超码
设K为关系模式R中的属性或属性组合。若U部分依赖于K,则K为超码。
【例】在关系S(Sno,Sdept,Sage)中,(Sno,Sdept)、(Sno,Sage)、(Sno,Sdept,Sage)是超码。
注:无论是候选码还是超码,都是针对整个属性组U。
9、主码
若候选码多于一个,则选定其中的一个为主码。
【例】S(Sno, Sname, Sdept, Sage), 假设学生无重名Sno、Sname是候选码,选择Sno为主码。
10、全码
整个属性组是码,则称为全码。
【例】关系模式R(P,W,A) P:演奏者W:作品A:听众
语义: 一个演奏者可以演奏多个作品,某一作品可被多个演奏者演奏,听众可以欣赏不同演奏者的不同作品
R (P,W,A)码为(P, W, A),即全码,All-Key。
11、主属性
包含在任何一个候选码中的属性称为主属性。
12、非主属性
不包含在任何码中的属性称为非主属性或非码属性。
【例】 S(Sno, Sdept, Sage), Sno是码,Sno是主属性,Sdept, Sage是非主属性。
SC(Sno, Cno, Grade)中,(Sno, Cno)是码,Sno, Cno是主属性,Grade是非主属性。
13、范式
范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求满足不同程度要求的为不同范式。
14、规范化
一个低一级范式的关系模式通过模式分解(schema decomposition)可以转换为若干个高级范式的关系模式的集合,这种过程就叫规范化( normalization)。
15、1NF
如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。
第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据模式。
【例】科目余额表的期初、本期和期末属性都由借方和贷方两个数据项组成,则不是第一范式。
职工表的姓名、性别、出生年月等每个属性都是不可分的基本数据项,所以属于第一范式。
满足第一范式的关系模式并不一定是一个好的关系模式。
16、2NF
若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF。
【例】S-L-C(Sno, Cno, Sdept, Sloc, Grade)∈1NF
S-L-C(Sno, Cno, Sdept, Sloc, Grade)∈2NF
非主属性Sdept和Sloc 部分函数依赖于码(Sno, Cno)。
17、3NF
关系模式RE 1NF,若R中不存在这样的码X、属性组Y及非主属性Z (Y7 Z), 使得X→Y, Y→Z, Y>X,成立,则称R∈3NF。
3NF的一些性质:
若R∈3NF,则R的每一个非主属性既不部分函数依赖于候选码也不传递函数依赖于候选码。
如果R∈3NF,,则R∈2NF采用投影分解法将一一个2NF的关系分解为多个3NF的关系,可以在一定程度上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。
将一个2NF关系分解为多个3NF的关系后,并不能完全消除关系模式中的各种异常情况和数据冗余。
18、BCNF
设关系模式R∈1NF,如果对于R的每个函数依赖X→Y,且X不包含Y时,X必含有码,那么R ∈ BCNF。即,在关系模式R中,如果每一个决定因素都包含码,则R∈BCNF。
【例】STJ(S,T,J)∈3NF T→J,(S,J) →T, (S, T)→J
SJ (S,J)∈BCNF SJ的码为(S, J),all-key
TJ (T,J) ∈BCNF TJ的码为T,T→J
BCNF的关系模式所具有的性质
1.所有非主属性对每一个码都是完全函数依赖。
2.所有主属性对每一个不包含它的码也是完全函数依赖。
3.没有任何属性完全函数依赖于非码的任何一组属性。
如果关系模式RE BCNF,必定有R∈3NF
如果关系模式R∈3NF,不一定有R∈BCNF 心如果一个关系数据库中的所有关系模式都属于BCNF,那么在函数依赖范畴内,它已实现了模式的彻底分解,达到了最高的规范化程度,消除了操作异常诸多问题。
19、4NF
4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。
20、5NF
如果消除了属于4NF的关系模式中存在的连接依赖,则可以进一步达到NF关系模式。

(二)建立一个关于系、学生、班级、学会等诸信息的关系数据库。
学生:学号、姓名、出生年月、系名、班号、宿舍区。
班级:班号、专业名、系名、人数、入校年份。
系:系名、系号、系办公地点、人数。
学会:学会名、成立年份、办公地点、人数。
语义如下:一个系有若干专业,每个专业每年只招一个班,每个班有若干学生。一个系的学生住在同一宿舍区。每个学生可参加若干学会,每个学会有若干学生。学生参加某学会有一个入会年份。
请给出关系模式,写出每个关系模式的极小函数依赖集,指出是否存在传递函数依赖,对于函数依赖左部是多属性的情况讨论函数依赖是完全函数依赖,还是部分函数依赖。指出各关系模式的候选码、外部码,有没有全码存在。

1.关系模式
学生(学号,姓名,出生年月,系名,班号,宿舍区)
班级(班号,专业名,系名,人数,入校年份)
系(系名,系号,系办公地点,人数)
学会(学会名,成立年份,办公地点,人数)
学生-学会(学号,姓名,学会名,入会年份)
2.
(1)学生(学号,姓名,出生年月,系名,班号,宿舍区)
最小函数依赖集:
学号→姓名,学号→出生年月,学号→系名,学号→班号,系名→宿舍区
传递函数依赖:
学号→宿舍区
候选码:学号
外码:班号、系名
(2)班级(班号,专业名,系名,人数,入校年份)
最小函数依赖集:
班号→专业名,班号→人数,班号→入校年份,专业名→系名
传递函数依赖:
班号→系名
候选码:班号
外码:系名
(3)系(系名,系号,系办公地点,人数)
最小函数依赖集如下:
系号→系名,系名→系号,系号→系办公室地点,系号→人数
无传递函数依赖。
候选码:系号和系名
外码:无
(3)学会(学会名,成立年份,办公地点,人数)
最小函数依赖集如下:
学会名→成立年份,学会名→地点,学会名→人数
无传递函数依赖。
候选码:学会名
外码:无
(4)学生-学会(学号,学会名,入会年份)
最小函数依赖集:(学号,学会名)→入会年份
无传递函数依赖。(学号,学会名)→入会年份是完全函数依赖。
候选码:(学号,学会名)
外码:学号,学会名

(三)请举出三个多值依赖的实例
(1)关系模式MSC(M,S,C)中,M表示专业,S表示学生,C表示该专业的必修课。假设每个专业有多个学生,有一组必修课。设同专业内所有学生选修的必修课相同,实例关系如下。按照语义对于M的每一个值,S有一个完整的集合与之对应而不问C取何值,所以M→S。由于C与S的完全对称性,必然有M→C成立。
(2)关系模式ISA(I,S,A)中,I表示学生兴趣小组,S表示学生,A表示某兴趣小组的活动项目。假设每个兴趣小组有多个学生,有若干活动项目。每个学生必须参加所在兴趣小组的所有活动项目,每个活动项目要求该兴趣小组的所有学生参加。
按照语义有I→S,I→A成立。
(3)关系模式RDP(R,D,P)中,R表示医院的病房,D表示责任医务人员,P表示病人。假设每个病房住有多个病人,有多个责任医务人员负责医治和护理该病房的所有病人。

(四)下面的结论哪些是正确的? 哪些是错误的? 对于错误的请给一个反例说明之。
1、任何一个二目关系是属于3NF。
正确。因为关系模式中只有两个属性,所以无传递。
2、任何一个二目关系是属于BCNF
正确。按BCNF的定义,若X->Y,且Y不是X的子集时,每个决定因素都包含码,对于二目关系决定因素必然包含码。
3、任何一个二目关系是属于4NF。
正确。因为只有两个属性,所以无非平凡的多值依赖。

(五)现有数据如下图所示:
球队名 球队教练 城市编号 城市名 地址 球衣号 球员名
皇家马德里 齐达内 MA 马德里 A1 7 C罗
皇家马德里 齐达内 MA 马德里 A1 11 贝尔
皇家马德里 齐达内 MA 马德里 A1 9 本泽马
马德里竞技 西蒙尼 MA 马德里 B2 9 托雷斯
马德里竞技 西蒙尼 MA 马德里 B2 7 格里兹曼
马德里竞技 西蒙尼 MA 马德里 B2 1 托雷斯
此数据中有如下语义:一支球队只有一名主教练,一名主教练只在一直球队执教;一支球队只在一个城市,一个城市可以有多支球队,球队不能重名;一个球队只有一个地址;一支球队有多名球员,一名球员只在一支球队效力;每支球队内没有重号的球员,但球员之间可能重名。请分析此数据,并在函数依赖的范畴内回答下列问题:

1、请找出这个关系中的码。
(球队名,球员名)
2、找出这个关系中的函数依赖。
球队名->球队教练,球队名->城市编号,球队名->城市名,球队名->地址,
球衣号->球员名,城市编号->城市名
3、请指出这个关系上的哪些函数依赖会造成哪些异常现象。
(1)插入异常。假如要插入一个球员“球衣号=17,球员名=Yao”但该球员还未有球队,即这个球员无球队名,这样的元组就无法插入进去,因为插入元组时必须要给定码值,而这时码值的一部分为空,因而球员的固有信息无法插入。再或者,在建立一个新的球队时,球队还没有队员,那么无法插入球队的球队名、球队教练等信息。如果一直球队需要加入新的球员,还没有分配球衣号, 也无法插入。
(2)删除异常。如果马竞这个球队要解散了,要删除球队名,那么“马德里竞技”这个数据项就要删除。而“马德里竞技”是主属性,删除了“马德里竞技”整个相关的元组都要一起删除,使得该球队的三名球员的信息也被删除了,从而造成了删除异常,即不应删除的信息也删除了。再或者,如果某一个球队只有一名球员,如果退队,需要删除该名球员,则整个元组都必须一起删除,那么球队名、球队教练等信息都会被删除,从而造成了删除异常,即不应删除的信息也删除了
(3)修改复杂。假如某个球队要搬家(到另一个城市),这需要修改此球队中的每一个元组,如果这个球队有k个球员,那么城市编号、城市名、地址重复存储了k次,不仅存储冗余大,而且必须无遗漏地修改k个元组中全部的城市编号、城市名、地址信息,造成修改的复杂化
(4)数据冗杂。每支球队的球队名、球队教练、城市编号、城市名和地址都重复出现多次,球队中有多少球员,就会重复存储多少次,这大大地浪费了存储空间
4、这个关系属于第几范式?并说明判断的依据。
第一范式,存在部分函数依赖
5、将这个关系分解成尽可能高的范式,写出分解后的关系模式并指明是第几范式?
关系模式-球队(球队名,球队教练,城市编号,地址)
外码为:关系模式-城市中的城市编号
关系模式-城市(城市编号,城市名)
关系模式-球员(球队名,球衣号,球员名)外码为关系模式-球队中的球队名
分解后的关系模式为BCNF

你可能感兴趣的:(sql,数据库)