数据库基础——规范化、关系模式

一.建立一个描述学校教务的关系模式 S-L-C(Sno, Sdept, Sloc, Cno, Grade),学生的学号(Sno)、所在系(Sdept)、课程名(Cname)、成绩(Grade)、学生住处(Sloc),假设每个系的学生住在同一个地方,函数依赖关系如下图

img


该关系模式的码是什么?满足2NF吗?为什么?
若不满足,如何分解成2NF,以及分解后的关系模式的码。

二.关系模式:R(A,B,C,D,E,F,G,H)
R上存在的函数依赖有A→B,B→C,(D,E)→A,G→F
(1) 该关系模式的码是什么?满足2NF吗?为什么?
(2) 将关系模式R分解到3NF,是否满足BCNF。

非主属性Sdept、Sloc并不完全依赖于码
关系模式S-L-C不属于2NF

用投影分解把关系模式S-L-C分解成两个关系模式
SC(Sno,Cno,Grade)
S-L(Sno,Sdept,Sloc)

https://blog.csdn.net/dear_xiaolin/article/details/119832106

模式分解(2NF、3NF)
求闭包
求属性集()关于 上的函数依赖集的闭包 。

1、令,i=0。

2、对于F中所有左边为或其子集的函数依赖,把其右边的属性加入,得到。

3、判断是否等于U,若相等,则。判断是否等于,若相等,则。否则继续执行第二步,i++。

例:有关系 ,,,求。


由得,
由得,

求候选码
1、把函数依赖集F中的属性分为L类、R类、LR类和N类。

L类:只在函数依赖左边出现的属性

R类:只在函数依赖右边出现的属性

LR类:在函数依赖左边和右边都出现的属性

N类:未在函数依赖中出现的属性

2、对于各类,有如下性质:

若X是L类,则X必为关系R的任一候选码
若X是L类,且 ,则X为唯一候选码
若X是R类,则X不在任何候选码中
若X是N类,则X必包含在任一候选码中
3、对属于L类的属性,不断的加入LR的属性,形成属性组W,求 ,若 ,则W为候选码。求出所有的Wi。

例:有关系 ,,

L类:A、B, R类:C、E, LR类:D, N类:无

则候选码中一定有AB,有,由性质2得,(A, B)为唯一候选码。

分解为2NF
若关系中,主键为W,有且,则可把关系分解为 ,。

判断R1,R2是否均符合2NF;若不符合,则继续按上述方法分解,直到符合为止。

例:有关系 ,,

已知候选码为(A, B),有,故R不符合2NF,分解为,。

R1,R2均符合2NF。

求最小依赖集
1、去掉F中所有函数依赖右边的多属性。

例:

2、去掉F中所有函数依赖左边的多属性。

例:对于,若,则

3、去掉冗余的函数依赖。

例:对于,若去掉该条函数依赖后,对于F中剩下的函数依赖,可以得到,则该条函数依赖可去除

分解为3NF(保持函数依赖)
1、求F的最小依赖集,仍记为F。

2、对于F中为出现的属性,把这些属性构成一个关系模式R0,同时把这些属性从U中除去,剩余的属性仍记为U。

3、若有,且XA=U,则算法终止,否则执行第4步。

4、对F中的所有函数依赖,按具有相同左部的原则分为k组。每一组中出现的所有属性组成的集合为,若则去掉。剩余的所有各组成一个关系模式。

例:有关系,,,

1、求F的最小依赖集

右边无多属性,跳过
左边为多属性,求得,故不可去除
去掉,有;去掉,有;去掉,有,故不可去除
因此,F最小依赖集为。

2、 F中所有属性均有出现,故跳过该步。

3、不满足算法终止条件,跳过该步。

4、按相同左部可分为(A, B, C),(A, D),(D, E)。他们之间彼此不存在包含关系,因此该关系模式可分解为,,。