1.最小依赖集
①右切(确保函数依赖集的右部只含一个属性)
②除本求包( Ⅰ将函数依赖集中的每一个函数依赖暂时剔出,
Ⅱ然后求该函数依赖左部属性的闭包,
Ⅲ若闭包中出现该函数依赖的右部属性,则将其剔除)
③左部最小化(Ⅰ将函数依赖集左部含多个属性的函数依赖提出进行最小化操作,Ⅱ左部含有多个属性的先将其中一个属性暂时去除,然后剩余属性求闭包,若能推导含有去除的那个属性,则永久去除那个属性,反之保留,Ⅲ按照这样的步骤慢慢推导即可)
Eg:已知关系模式R<U,F>,U={A,B,C,D,E,F,G} F={BCD->A,BC->E,A->F,F->G,C->D,A->G}
求F的最小函数依赖集。
2.候选码
定义:若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码。
①只在F右部出现的属性,则不属于候选码;
②只在F左部出现的属性,一定存在于某候选码当中;
③两边都没有出现的节点,指定存在于候选键中;
④其他属性逐个与②③的属性组合,求属性闭包,直至X的闭包等于U,若等于U,则X为候选码。
Eg:R{ABCDE} F{AB->C, AB->E, CDE->AB}
解:判断①,无只在F右部出现的属性;判断②,D只在F左部出现,一定存在于某个候选码中;判断③,无两边都没有出现的节点;
依次(AD)(BD)(CD)(DE)求闭包,若没有继续拓展
(AD)F+ =AD (ABD)F+ =ABCDE=U
(BD)F+ =BD (ACD)F+ =ACD
(CD)F+ =CD (ADE)F+ =ADE
(DE)F+ =DE
则候选码为:ABD
3.E-R图
Ⅰ画E-R图
①先画出实体(方形)、属性(椭圆形)、联系(菱形)
②根据题目中的语句,标清楚1:1、1:N、M:N关系
Ⅱ根据E-R图构建关系模式
先写所有实体及其属性的关系模式
再者判断
1:1型,任取两端的实体之一,然后将另一端的实体主码作为所取的实体关系模式的外码,再加联系的属性。
1:N型,选取靠N最近的一端的实体模式,将靠1端的属性主码作为所取实体关系模式的外码,再加上联系的属性。
M:N型,新加联系的关系模式,将联系所相连的实体集中的主码,以及联系的属性均加入到新的联系关系模式中。
Eg:
4.范式
1NF:
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。
说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库,一般出题都满足1NF。
2NF属性完全依赖于主键 [ 消除部分子函数依赖 ]:
如果关系模式R为第一范式,并且R中每一个非主属性完全函数依赖于R的某个候选键, 则称为第二范式模式。(无部分依赖)
3NF属性不依赖于其它非主属性 [ 消除传递依赖 ]:
如果关系模式R是第二范式,且R中每个非主属性都不传递依赖于R的候选键,则称R为第三范式模式。
BCNF:
若关系模式R是第三范式,且R的决定因素均为候选键,则称R为BCNF。
范式分解转换
一、1NF与2NF转换
1.确定模式R的主键W
2.看主键W的真子集是否存在FD(函数依赖)X->Z,其中X是W的真子集,Z是非主属性。如果存在函数依赖X–>Z,则模式R可以进行分解;否则就不能分解,结束
3.R1为(X,Z)
4.R2为(U-Z)
5.继续对R1和R2重复上述步骤
Eg:
给定(学号,姓名,系名,系主任,课程名,分数)为例,进行模式分解:
U=(学号,姓名,系名,系主任,课程名,分数)
1.确定主键W=(学号,课程名)
2.确定存在依赖,学号->(姓名,系名,系主任),即X=学号,Z=(姓名,系名,系主任)
3.R1(学号,姓名,系名,系主任),即XZ=(学号,姓名,系名,系主任)
4.R2(学号,课程名,分数),即Y=U-Z=(学号,课程名,分数)
5.再次判断是否有局部依赖
分解后得到2NF:
R1(学号,姓名,系名,系主任)
R2(学号,课程名,分数)
二、2NF与3NF转换
设关系模式R(U),主键是W,R上还存在FD X—>Z,并且Z是非主属性,Z∉X,X不是候选键,这样W—>Z就是一个传递依赖。此时应把R分解成两个模式:
R1(XZ),主键是X
R2(Y),其中Y=U-Z,主键仍是W,外键是X(参照R1)。
利用外键和主键匹配机制,可以得到R
如果R1和R2还不是3NF,重复上述过程,一直到每一个关系模式都是3NF为止。
Eg:
对上面分解后的2NF进行分解
R1(学号,姓名,系名,系主任)
R2(学号,课程名,分数)
模式分解:
1.先判断R1,主键是学号,即W=学号;
2.存在传递依赖,学号—>系名—>系主任,即X=系名,Z=系主任;如不存在依赖则结束
3.得到R11(系名,系主任),即XZ=(系名,系主任);
4.得到R12(学号,姓名,系名),即Y=U-Z=(学号,姓名,系名);
5.对R2同样进行上述判断;
6.对分解后模式重复上述步骤
分解后得到3NF:
R11(系名,系主任)
R12(学号,姓名,系名)
R2(学号,课程名,分数)
5.锁
X锁与S锁
6.无损分解和保持函数依赖
1.无损分解:表格法
已知U(属性集),函数依赖F,关系模式R
①以属性集为横轴(行),关系模式集为竖轴(列)构建表格。
如果竖轴(列)含有行属性(行)则该表格标记a x(x为下标,在第几列,x就为几)
反之如果不含该属性,则该表格标记b ij(i为行数,j为列数)
②根据函数依赖更新表格
依次从函数依赖集中观察函数依赖的左部的属性对应表格(若为单属性)行分量是否相同(相同几行)然后将相同的列标记,寻找对应函数依赖的右部,在右部将左边对应且相同的(这里的相同是左部相同的行数)几行标记,若存在a x则其余几行(标记的行)均改为a x,若只存在b ij,则将其他几行替换为最小行数(i)的b ij。
(多属性)寻找左部对应两列是否由相同分量,更新表方法同上(不在阐述)。
例如F(AB->C) 其中A列为 a1 b21 b31 B列为 a2 b22 b32 则这就没有相同分量;若A列为 a1 a1 b31 B列为 a2 a2 b32 则第1,2行的分量相同。
Eg:
2.只适用于分解成两个R时(应用型选择题偏多)
掌握:U1∩U2->U1-U2∈F+ 或者 U1∩U2->U2-U1∈F+
Eg:R<U,F> U={A,B,C} F={A->B}
R1={AB,BC} R2={AB,AC}
①AB∩BC=B,AB-BC=A,BC-AB=C
B->A∉F B->C∉F ∴为有损分解
②AB∩AC=A,AB-AC=B,AC-AB=C
A->B∈F A->C∉F ∴为无损分解
3.判断是否保持函数依赖
①先求F的最小函数依赖Fm
②再求分解的R的函数依赖的属性集R1、R2…
③进行判断
Eg: F={E->D,C->B,CE->G,B->A} ρ={R1(AB),R2(BC),R3(ED),R4(EAG)}
①Fm={E->D,C->B,CE->G,B->A}
②R1(AB),F1={B->A}
R2(BC),F1={C->B}
R3(ED),F1={E->D}
R4(EAG),F1={EAG->EAG}
③G={B->A,C->B,E->D,EAG->EAG} 无CE->G;
故该关系模式不保存函数依赖