函数依赖

函数依赖:X->Y,X函数确定Y 或 Y函数依赖X

Student(Sno,Sname,Ssex,Sage,Sdept)

假设不能重名

Sno->Ssex,Sno->Sage,Sno->Sdept,

Sname->Ssex,Sname->Sage,Sname->Sdept

Sno<->Sname

如果X->Y且Y->X,则记为X<-->Y

如果Y不函数依赖于X,则记为X-/->Y

平凡函数依赖:(Sno,Cno)->Sno,一般不讨论

非平凡函数依赖:X->Y但Y不是X的子集

完全函数依赖: X-F->Y,Y完全依赖X

例:(Sno,Cno)--F-->Grade,Sno-/->Grade,Cno-/->Grade

Grade是由Sno和Cno共同决定的

理解:因为完全函数依赖的定义是对于X的真子集X‘,X‘-/->Y。所以完全函数依赖的X必须有多个属性。完全函数依赖中的X可以理解为只有X中的所有属性共同作用时才能确定Y,并且X中的所有元素都是缺一不可的。(这可以类比分权,每个人都不能单独做决定,但是每个人都缺一不可)

第一范式就是主码--F->所有属性的集合U

第二范式就是主码--F-->每个非主属性。

部分函数依赖: X-P->Y,Y不完全依赖X 

例:(Sno,Cno)--P-->Sdept,(Sno,Cno)-P->Sno 

传递函数依赖: X->Y,Y->Z,则称Z对X传递函数依赖 ,X-传递->Z

例:在关系Std(Sno,Sdept,Mname)中有Sno->Sdept,Sdept->Mname,所以Mname传递函数依赖于Sno

码:

K是属性或属性组合,如果K--F-->U,则K为R的候选码。

对于候选码的理解:

候选码是唯一决定U的属性的最小属性组合。

比如在S(Sno,Cno,Sdept,Grade)中(Sno,Cno)可以唯一确定U(Sno,Cno,Sdept,Grade),且Sno和Cno都不能唯一确定U,所以候选码是(Sno,Cno),因为候选码只有一个,所以主码也是(Sno,Cno)。

如果U函数部分依赖于K,则K-->U,K为超码。

候选码是一类特殊的超码,候选码的超集一定是超码,候选码的任何真子集一定不是超码。

如果候选码多于一个,则选定其中的一个作为主码。

主属性:       包含在任何一个候选码中的属性

非主属性:   不包含在任何候选码中的属性

全码:          整个属性组是码

外部码(外码):关系模式R中属性或属性组并非R的码,但X是另一个关系模式的码,则X是R的外部码

主码和外码提供了一个表示关系间联系的手段

范式:

范式是符合某一种级别的关系模式的集合。

关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。

【数据库系统】规范化_非主属性

规范化:一个低一级范式的关系模式,通过模式分解,可以转换为若干个高一级范式的关系模式的集合。

1NF:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。

【数据库系统】规范化_1024程序员节_02

 2NF:若关系模式R∈1NF,且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF。

例:SLC(Sno,Sdept,Sloc,Cno,Grade)Sloc为学生的住处,并且每个系的学生住在同一个地方。SLC的码为(Sno,Cno)

函数依赖有

Sno->Sdept,Sno->Sloc,Sno->Cno,(Sno,Cno)-F->Grade

Sdept->Sloc

(Sno,Cno)-P->Sdept

(Sno,Cno)-P->Sloc

理解:

写部分函数依赖的目的是为了说明该表不属于第二范式。 (考试可以不写部分函数依赖)

可以通过投影分解把关系模式分解为两个关系模式,这两个关系模式都属于第二范式:

S1(Sno,Cno,Grade),S2(Sno,Sdept,Sloc)

理解:

第二范式就是不存在非主属性部分依赖于主码,如果R的主码为单属性或R的全体属性均为主属性,则R∈2NF

3NF:消除传递性依赖

在S2(Sno,Sdept,Sloc)中,Sno->Sdept,Sdept->Sloc,存在传递性依赖。

消除传递性依赖:

将S2分解为两个表S-D(Sno,Sdept),D-L(Sdept,Sloc)

【数据库系统】规范化_1024程序员节_03

 

(1)函数依赖:

{Sno->Sname,Sno->SD,Sno->Sdname,

Sno->Course出错!!!!

(Sno,Course)->Grade

SD->Sdname

}

主码:(Sno,Course)

(2)原关系模式是第一范式。将原关系模式规范为2NF。

消除非主属性对主码的部分函数依赖。

(Grade对主码(Sno,Grade)是部分依赖)

分解为两个表(表述不准确,应该说分解为两个关系模式)SC(Sno,Course,Grade),SS(Sno,Sname,SD,Sdname)

(3)

因为Sno->SD,SD->Sdname,存在传递函数依赖

将SS继续分解成两个关系模式,SS1(Sno,Sname,SD),SS2(SD,Sdname)  出错!!

题目中问的是将关系模式分解成3NF,所以要把将SC写进去

SC(sno,course,grade),SS2(SD,Sdname),SS1(Sno,Sname,SD)