数据库规范化

版权声明:所有的博客仅仅作为个人笔记使用!!!!!!! https://blog.csdn.net/qq_35976351/article/details/83010476

码和属性的关系

函数依赖

f ( X ) Y f(X)\rightarrow Y ,则 Y Y 函数依赖于 X X 。理解为知道 X X 后,就可以推出 Y Y ;而且,能且仅能推出唯一的 Y Y 。这类似于数学上的函数。
平凡函数依赖: X Y X \rightarrow Y ,同时 Y X Y \in X ,则是平凡函数依赖。
非平凡函数依赖: X F Y X \xrightarrow{F} Y ,同时 Y X Y \notin X ,则是平凡函数依赖。
完全函数依赖: X Y X \rightarrow Y ,而且任何 X X 的真子集 X X^{'} ,都没有 X Y X^{'}\rightarrow Y
部分函数依赖: X P Y X \xrightarrow{P} Y ,而且任何 X X 的真子集 X X^{'} ,存在至少一个 X X^{'} X P Y X^{'}\xrightarrow{P} Y

一个关系的所有属性。
候选码: 唯一标识一个关系的属性组
主码: 候选码多于一个,从候选码中选出的一个码作为主码。
主属性: 候选码的所有属性。
非主属性: 不包含在任何候选码中的属性
全码: 极端情况下,整个属性组都是码。
外码: X X 不是该关系模式的码,但是 X X 是另一个关系模式的码。比如 ( S n o , C n o , G r a d e ) (Sno, Cno, Grade) 中的Sno不是码,但 S n o Sno ( S n o , S n a m e , S a g e ) (Sno, Sname, Sage) 的码,则 S n o Sno 是外码

范式

范式的作用是减少数据冗余和消除各种异常。

1NF

所有的关系模式都是1NF

2NF

在1NF的基础上,不存在部分函数依赖。
比如给出一个表:
( S n o , S d e p t , S l o c , C n o , G r a d e ) (Sno,Sdept,Sloc,Cno,Grade)
其中 S n o Sno 学号, S d e p t Sdept 是系, S l o c Sloc 是寝室地址, C n o Cno 是课程号, G r a d e Grade 是该学生某个课程的成绩。
( S n o , C n o ) F G r a d e S n o S d e p t ,   ( S n o , C n o ) P S d e p t S n o S l o c ,   ( S n o , C n o ) P S l o c (Sno, Cno)\xrightarrow{F} Grade \\ Sno \rightarrow Sdept, \ (Sno,Cno)\xrightarrow{P} Sdept\\ Sno \rightarrow Sloc, \ (Sno, Cno)\xrightarrow{P} Sloc
那么上述存在了部分函数依赖,需要把部分函数依赖的进行消除:
S n o S d e p t S n o S l o c Sno \rightarrow Sdept \\ Sno \rightarrow Sloc
因此得出新的关系模式:
( S n o , S l o c , S d e p t ) ( S n o , C n o , G r a d e ) (Sno, Sloc, Sdept) \\ (Sno, Cno, Grade)

3NF

在2NF的基础上,消除传递函数依赖。

传递函数依赖: X Y X\rightarrow Y Y X Y\nrightarrow X Y Z Y\rightarrow Z ,则 Z Z 传递依赖于 X X

比如上述的关系模式:
( S n o , S l o c , S d e p t ) (Sno, Sloc, Sdept)

S n o S l o c S d e p t S n o S l o c S d e p t Sno\rightarrow Sloc \\ Sdept \nrightarrow Sno \\ Sloc \rightarrow Sdept
那么 S d e p t Sdept 函数传递依赖与 S n o Sno 。3NF需要消除这种模式。
( S n o , S d e p t ) ( S d e p t , S l o c ) (Sno, Sdept) \\ (Sdept, Sloc)

BCNF

在3NF基础上,使得每一个决定因素都包含码。
给出一个BCNF的反例:
S T J ( S , T , J ) STJ(S, T, J)
其中 S S 是学生, T T 是教师, J J 是课程。所以有:
( S , J ) T ( S , T ) J T J (S, J)\rightarrow T \\ (S, T)\rightarrow J \\ T\rightarrow J
( S , J ) (S, J) ( S , T ) (S, T) 都是候选码。 T T 是决定因素,但是 T T 不包含码。

在只考虑函数依赖的情况下,BCNF是规范化程度最高的范式。

4NF

多值依赖: R ( U ) R(U) 是属性集 U U 上的一个关系模式, X , Y , Z X,Y,Z U U 的子集,且 Z = U X Y Z=U-X-Y 。当且仅当 R ( U ) R(U) 的任一关系 r r ,给定的一对 ( x , y ) (x,y) 值,有一组 Y Y 的值,这组值仅仅取决于 X X 的值而与 Z Z 的值无关,则成 R ( U ) R(U) 中的多值依赖 X Y X\rightarrow \rightarrow Y 成立。

平凡多值依赖: X Y X \rightarrow \rightarrow Y ,而 Z = Z=\empty ,则称 X Y X\rightarrow \rightarrow Y 为平凡多值依赖。

4NF: 关系模式 R < U , F > 1 N F R<U,F>\in 1NF ,如果对于 R R 的每个非平凡多值依赖 X Y X\rightarrow \rightarrow Y ( Y X Y \nsubseteq X ),X都含有码,则 R < U , F > 4 N F R<U,F>\in 4NF

猜你喜欢

转载自blog.csdn.net/qq_35976351/article/details/83010476