5.3 关系数据库设计理论 5.3.1 问题的提出
% f( T% B3 V, o# w5 k; i 究竟一个关系数据库包含哪些属性是合理的,如何评价一个关系模式设计的优劣?$ ?" A6 B. ]) D$ m k, @
5.3.2 函数依赖
- d9 g# D# p8 _% ?% O3 c 函数依理论利用一个关系中属性之间的依赖关系评价和优化关系模式,以保证存储到数据库中的关系具有较好特性;) Q6 l7 g- v" d. C+ R" T
1、 函数依赖:
3 p% ]) S$ R5 x (1) 设R(U)为一关系模式,X和Y为属性全集U的子集,若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称“X函数决定Y”或“Y函数依赖于X”,并记作X
. m: Z3 q: Y6 I( l2 [$ ^, d8 M, A0 G; P& R# p7 t
Y,其中X称为决定因素,因为根据函数依赖定义,给定一个X,就能惟一决定一个Y。
9 H7 G F# W6 G- n2 b (2) 这里讨论的函数关系与数学上的不同,是不能计算的,是一个关系中属性之间存在的依赖关系;它是一种语义范畴的概念,只能根据两个属性之间的语义来确定一个函数依赖是否存在。: h+ {) Y4 [* x5 z
2、 完全与部分函数依赖:7 X, J j$ n: M0 T2 o
(1) 在关系模式R(U)中,如果XàY成立,并且对X的任何真子集X’不能函数决定Y,则称Y对X是完全函数依赖,被记作X---f---àY。) m3 J9 Q7 Z4 i( [6 y6 z* u- p
(2) 若XàY,但Y不完全函数依赖于X,则称Y对X是部分函数依赖,记作X--pàY;
$ c0 ~& E) T# u# [! n 3、 传递函数依赖:2 w, I/ c" `0 ~8 E8 |" w
在关系R(U)模式中,如果X决定Y,(Y不属于X),Y不决定X,Y决定Z,则称Z对X传递函数依赖。/ q4 [: [* B: B. l1 O0 D( ~
4、 平凡与非平凡函数依赖:
2 y, q$ ^6 L/ Q1 C (1) 若X决定Y,但Y属于X,则称XàY是平凡函数依赖,否则称非平凡函数依赖;$ b/ h& {, [- c5 w- m* t' Z+ _
(2) 即平凡函数依赖,仅当其右边的属性集是左边属性集的子集时成立;+ ]; V$ w9 t" s
(3) 非平凡函数依赖,仅当其右边的属性集至少有一个属性不属于左边有集合时成立;- b- ^/ @* P4 I5 S
(4) 完全非平凡函数依赖:仅当其右边的属性集中属性都不在左边的集合时成立;: T* s- V1 H# @' V
5、 码:
) O& k% a- T; M8 X9 J, E (1) 在关系模式R(U)中,K为R的属性或属性组,若K函数决定A1.A2….An,则K为关系模式R的候选码,包含在候选码中的属性称为主属性,否则为非主属性;
, j9 h8 m/ Y4 `/ Y (2) 若一个关系的候选码不止一个,则选定其中一个作为关系R的主码;
0 K: C- M9 H* [. T n _# j/ T1 } (3) 关系的码属性除了必须完全函数决定关系的所有其他属性外,还必须满足最小化规则,即在关系模式R(U)中,不存在一个K的真子集能够函数决定R的其他属性。
" @* }" O" ~2 Q8 p% \" A, Z 6、 函数依赖的推理规则:) @% w- P1 y) Q, w% E
(1) 自反律:若Y(包含于)X(包含于)U,则XàY成立;
1 s; {9 i1 H" {3 s8 X (2) 增广律:若XàY,且Z(包含于)U,则XZàYZ成立;+ R6 s; s& ^# c
(3) 传递律:若XàY,YàZ,则XàZ成立;
' q5 t& c3 A! k3 s6 A9 b" J* X6 n (4) 合并规则:若XàY,XàZ成立,则XàYZ;
7 z% S! W2 M& o% C$ W (5) 分解规则:若XàY和Z(包含于)Y成立,则XàZ也成立;
" U; R+ I9 [+ Q/ e (6) 伪传递规则:若XàY,YWàZ,则XWàZ成立;
1 s3 g5 ?$ E, a: j 7、 属性集闭包:
^" ~# d5 _# r (1) 设F是属性集U上的函数依赖集,X为U的一个子集,那么对于F,属性集X关于F的闭包(用X+表示)为:X+={A|XàA}
9 A* |) Q! g, f8 D' h9 { (2) 由属性集团包的定义可知,若想判断函数依赖XàY是否成立,只要计算X关于函数依赖集F的闭包,若Y是X闭包中的一个元素则XàY成立;9 w% Y; F0 l2 H; a: o' I4 A
8、 确定关系的码:& o2 h! J3 S1 G" ]* M
(1) 利用迭代算法计算X+,步骤如下:6 `$ u; o8 `/ e. N+ S; G
(A) 选X作为闭包X+的初值X(0);
7 Q" `8 h5 C6 R5 k) ~9 e6 J' U (B) 由X(i)计算X(i+1)时,它是由X(0)并上属性集合A所组成,其中A满足下列条件:Y(包含于)X(i),且F中存在函数依赖YàZ,而A(包含于)Z。因为U是有穷的,所以会得到X(i)=X(i+1),此时X(i)为所求的X+。
; j/ D4 f7 s2 @3 b- W! V 5.3.3 规范化设计方法) L& t* O! } R$ U& N% G' K5 L! a
1、 第一范式:
* b' ]7 x! Y- D2 |0 l. E# N (1) 定义:设关系模式R(F,U),如果R的每一个属性都是不可分的数据项,则此关系模式为第一范式;/ }. t+ `5 {+ M9 G
(2) 一个给定关系和第一范式(1NF)的区别:& N1 T4 f0 G: T; Q( {, ?" v% ?( x
(A) 一个关系中的数据按照行和列的形式组织,每个元组具有相同数目的属性个数,且每一个元组的属性值具有统一的数据类型和长度;元组或属性的排列与顺序无关,每个元组必须通过一个属性或属性组惟一识别;* E: N# e! J3 F( I1 o; _
(B) 第一范式实际上对关系增加了一个约束,即关系中元组的每个属性都只取一个值,第一范式是对关系模式的基本要求,不满足第一范式的数据库就不是关系数据库。
5 k7 e" \! j5 Q' O' M; u, _* j0 d 2、 第二范式:, g- L9 M( }) e$ m4 B/ w
(1) 定义:若关系模式R(F,U)是1NF,且每个非主属性完全函数依赖于码,则称R为第二范式,即在2NF中不存在非主属性对码的部分依赖;8 e$ l; B7 |# j, d
(2) 仅满足第一范式关系会存在种种问题,要消除必须用更高级的范式标准来设计,称为标准化;$ T5 `) k; A. e% E( V1 j2 ^
(3) 具体做法是将大的关系分解成多个小的关系,使分解后的关系满足更高级范式的要求。
" |1 r, h$ `9 \4 }' t x; t5 b (4) 第二范式实际上对关系增加了一个约束,就是关系中的每一个属性必须完全依赖于主码,即在第一范式的基础上,消除非主属性对主码的部分函数依赖可达到2NF;9 f+ N. p7 ~& V5 m3 X( ~3 ]
3、 第三范式:
& {/ ^" W' j# Y9 p# L (1) 定义:若关系R(U,F)为第一范式,且不存在非主属性对主码的传递函数依赖,则称R为第三范式;
. l6 ^7 e- r9 M' y: ^ (2) 第三范式是在第二范式的基础上对关系又增加了一个约束,就是关系中的每一个非主属性必须只依赖于主码。即2NF的基础上,消除非主属性对主码的传递函数依赖可达到3NF。 |