当前位置:文档之家› 数据库规范化理论习题

数据库规范化理论习题

规范化理论习题1. 解释下列名词:函数依赖、部分函数依赖、完全函数依赖、传递函数依赖、候选关键字、主关键字、全关键字、1NF、2NF、3NF、BCNF、多值依赖、4NF、连接依赖、5NF、最小函数依赖集、无损分解函数依赖:FD(function dependency),设有关系模式R(U),X,Y是U的子集, r是R的任一具体关系,如果对r的任意两个元组t1,t2,由t1[X]=t2[X]导致t1[Y]=t2[Y], 则称X函数决定Y,或Y函数依赖于X,记为X→Y。

X→Y为模式R的一个函数依赖。

部分函数依赖:即局部依赖,对于一个函数依赖W→A,如果存在X W(X包含于W)有X→A成立,那么称W→A是局部依赖,否则称W→A为完全依赖。

完全函数依赖:见上。

传递函数依赖:在关系模式中,如果Y→X,X→A,且X Y(X不决定Y), AX(A不属于X),那么称Y→A是传递依赖。

候选关键字:设K 为关主关键字:若关系模式R有多个候选码,则选定其中一个作为主关键字(Primary Key),有时也称作为主码。

全关键字:若关系模式R整个属性组都是码,称为全关键字(All Key)或全码。

1NF:第一范式。

如果关系模式R的所有属性的值域中每一个值都是不可再分解的值, 则称R是属于第一范式模式。

如果某个数据库模式都是第一范式的,则称该数据库存模式属于第一范式的数据库模式。

第一范式的模式要求属性值不可再分裂成更小部分,即属性项不能是属性组合和组属性组成。

2NF:第二范式。

如果关系模式R为第一范式,并且R中每一个非主属性完全函数依赖于R的某个候选键,则称是第二范式模式;如果某个数据库模式中每个关系模式都是第二范式的,则称该数据库模式属于第二范式的数据库模式。

(注:如果A是关系模式R的候选键的一个属性,则称A是R的主属性,否则称A是R 的非主属性。

) 。

3NF:第三范式。

如果关系模式R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R是第三范式的模式。

如果某个数据库模式中的每个关系模式都是第三范式,则称为3NF的数据库模式。

BCNF:BC范式。

如果关系模式R是第一范式,且每个属性都不传递依赖于R 的候选键,那么称R是BCNF的模式。

多值依赖:设R(U)是属性集U上的一个关系模式,X,Y,Z是U的子集,并且Z=U-X-Y, 用x,y,z分别代表属性集X,Y,Z的值,只要r是R的关系,r中存在元组(x,y1,z1)和(x,y2,z2)时,就也存在元组(x,y1,z2)和(x,y2,z1),那么称多值依赖(MultiValued Dependency MVD) X→→Y在关系模式R中成立。

4NF:第四范式。

设R是一个关系模式,D是R上的多值依赖集合。

如果D中成立非平凡多值依赖X→→Y时, X必是R的超键,那么称R是第四范式的模式。

连接依赖:关系模式R(U)中,U是全体属性集,X,Y,…,Z是U的子集,当且仅当R是由其在X,Y,…,Z上投影的自然连接组成时,称R满足对X,Y,…,Z的连接依赖。

记为JD(X,Y,…,Z)。

5NF:关于模式R中,当且仅当R中每个连接依赖均为R的候选码所蕴涵时,称R属于5NF。

最小函数依赖集:如果函数集合F满足以下三个条件:(1)F中每个函数依赖的右部都是单属性; (2)F中的任一函数依赖X→A,其F-{X→A}与F是不等价的;(3)F中的任一函数依赖X→A,Z为X的子集,(F-{X→A})∪{Z→A}与F不等价。

则称F为最小函数依赖集合,记为Fmin。

无损分解:设R是一个关系模式,F是R上的一个依赖集,R分解为关系模式的集合ρ={R1(U1),R2(U2), …,Rn(Un)}。

如果对于R中满足F的每一个关系r,都有r=∏R1(r) ∏R2(r) …∏Rn(r)则称分解相对于F是无损连接分解(lossingless join decomposition),简称为无损分解,否则就称为有损分解(lossy decomposition)。

2. 现要建立关于系、学生、班级、学会等信息的一个关系数据库。

语义为:一个系有若干专业,每个专业每年只招一个班,每个班有若干学生,一个系的学生住在同一个宿舍区,每个学生可参加若干学会,每个学会有若干学生。

描述学生的属性有:学号、姓名、出生日期、系名、班号、宿舍区;描述班级的属性有:班号、专业名、系名、人数、入校年份;描述系的属性有:系名、系号、系办公室地点、人数;描述学会的属性有:学会名、成立年份、地点、人数、学生参加某会有一个入会年份。

⑴请写出关系模式。

⑵写出每个关系模式的最小函数依赖集,指出是否存在传递依赖,在函数依赖左部是多属性的情况下,讨论函数依赖是完全依赖,还是部分依赖。

⑶指出各个关系模式的候选关键字、外部关键字,有没有全关键字。

解:各关系模式如下:学生(学号,姓名,出生年月,系名,班级号,宿舍区)班级(班级号,专业名,系名,人数,入校年份)系(系名,系号,系办公地点,人数)社团(社团名,成立年份,地点,人数)加入社团(社团名,学号,学生参加社团的年份)学生(学号,姓名,出生年月,系名,班级号,宿舍区)●“学生”关系的最小函数依赖集为:Fmin={学号→姓名,学号→班级号,学号→出生年月,学号→系名,系名→宿舍区}●以上关系模式中存在传递函数依赖,如:学号→系名,系名→宿舍区●候选键是学号,外部键是班级号,系名。

注意: 在关系模式中,如果Y→X,X→A,且X Y(X不决定Y), A不属于X,那么称Y→A是传递依赖。

班级(班级号,专业名,系名,人数,入校年份)●“班级”关系的最小函数依赖集为:Fmin={(系名,专业名)→班级号,班级号→人数,班级号→入校年份,班级号→系名,班级号→专业名}(假设没有相同的系,不同系中专业名可以相同)●以上关系模式中不存在传递函数依赖。

●“(系名,专业名)→班级号”是完全函数依赖。

●候选键是(系名,专业名),班级号,外部键是系名。

系(系名,系号,系办公地点,人数)●“系”关系的最小函数依赖集为: Fmin={系号→系名,系名→系办公地点,系名→人数,系名→系号}●以上关系模式中不存在传递函数依赖●候选键是系名,系号社团(社团名,成立年份,地点,人数)●“社团”关系的最小函数依赖集为: Fmin={社团名→成立年份,社团名→地点,社团名→人数}●以上关系模式中不存在传递函数依赖。

●候选键是社团名加入社团(社团名,学号,学生参加社团的年份)●“加入社团”关系的最小函数依赖集为: Fmin={(社团名,学号)→学生参加社团的年份}●“(社团名,学号)→学生参加社团的年份”是完全函数依赖。

●以上关系模式中不存在传递函数依赖。

●候选键是(社团名,学号)。

3. 设关系模式R(A,B,C,D),函数依赖集F={A→C,C→A,B→AC,D→AC,BD→A}。

1)求出R的候选码;2)求出F的最小函数依赖集;3)将R分解为3NF,使其既具有无损连接性又具有函数依赖保持性。

解:(1)根据函数依赖可得:属性B、D、BD为L类(仅出现在F的函数依赖左部)。

且在函数依赖的左部和右部均未出现的属性为0。

根据定理:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,则X必为R 的任一候选码的成员。

因此属性B、D必为候选码的成员。

且它们的闭包为:BF +=ABC,DF+=ACD,BDF+=ABCD再根据推论:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,且XF+包含了R的全部属性,则X必为R的唯一候选码。

故BD是R的唯一候选码。

所以R的候选码为BD。

(2)将F中所有函数依赖的依赖因素写成单属性集形式:F={A→C,C→A,B→A,B→C,D→A,D→C,BD→A}F中的B→C可以从B→A和A→C推导出来,B→C是冗余的,删掉B→C可得:F={A→C,C→A,B→A,D→A,D→C,BD→A}F中的D→C可以从D→A 和 A→C推导出来,D→C是冗余的,删掉D→C可得:F={A→C,C→A,B→A,D→A,BD→A}F中的BD→A可以从B→A 和 D→A推导出来,是冗余的,删掉BD→A可得:F={A→C,C→A,B→A,D→A }所以F的最小函数依赖集Fmin={A→C,C→A,B→A,D→A }。

(3) 由于R中的所有属性均在Fmin中都出现,对F按具有相同左部的原则分为:R1=AC,R2=BA,R3=DA。

其中,U1={A,C},U2={B,A},U3={D,A},F1= F1=∏U1={A→C},F2=∏U2={B→A},F3=∏U3={D→A}。

所以ρ={R1(AC),R2(BA),R3(DA) }。

4.设关系模式R(A,B,C,D,E,F),函数依赖集F={A B→E,BC→D,BE→C,CD→B,CE→AF,CF→BD,C→A,D→EF},求F的最小函数依赖集。

解:①利用分解规则,将所有的函数依赖变成右边都是单个属性的函数依赖,得F为:F ={A B→E,BC→D,BE→C,CD→B,CE→A,CE→F,CF→B,CF→D,C→A,D→E,D→F}②去掉F中多余的函数依赖A.设AB→E为冗余的函数依赖,则从F中去掉AB→E,得:F1={ BC→D,BE→C,CD→B,CE→A,CE→F,CF→B,CF→D,C→A,D→E,D →F}+:计算(AB)F1设X(0)=AB计算X(1):扫描F1中各个函数依赖,找到左部为AB或AB子集的函数依赖,因为找不到这样的函数依赖。

故有X(1)=X(0)=AB,算法终止。

+= AB不包含E,故AB→E不是冗余的函数依赖,不能从F中去掉。

即:(AB)F1F1={ A B→E,BC→D,BE→C,CD→B,CE→A,CE→F,CF→B,CF→D,C→A,D→E,D→F}B.设BC→D为冗余的函数依赖,则从F1中去掉BC→D,得:F2={A B→E,BE→C,CD→B,CE→A,CE→F,CF→B,CF→D,C→A,D→E,D →F}+:计算(BC)F2设X(0)=BC计算X(1):扫描F2中的各个函数依赖,找到左部为BC或BC子集的函数依赖,得到一个C→A函数依赖。

故有X(1)=X(0)∪A=BCA=ABC。

计算X(2):扫描F2中的各个函数依赖,找到左部为ABC或ABC子集的函数依赖,得到一个A B→E函数依赖。

故有X(2)=X(1)∪E=ABCE。

计算X(3):扫描F2中的各个函数依赖,找到左部为ABCE或ABCE子集的函数依赖,得到三个BE→C,CE→A和 CE→F 函数依赖。

故有X(3)=X(2)∪CAF=ABCEF。

计算X(4):扫描F2中的各个函数依赖,找到左部为ABCEF或ABCEF子集的函数依赖,得到二个CF→B和CF→D 函数依赖。

相关主题