5-1规范化

来源:互联网 发布:dns污染 知乎 编辑:程序博客网 时间:2024/04/30 18:16

规范化

tags:数据库

规范化的提出

关系模型有严格的数学理论基础,并且可以向别的数据模型转换,因此,人们就以关系模型为背景来讨论这个问题,行成了数据库逻辑设计的一个有力工具–关系数据库的规范化理论.

回顾关系模型形式化定义

一个关系模式应当是一个五元组.R(U,D,DOM,F)
这里,关系名R是符号化的元组语意.
U为一组属性.
D为属性组U中的属性所来自的域.
DOM为属性到域的映射.
F为属性组U上的一组数据依赖
由于D、DOM与模式设计关系不大,因此在本章中把关系模式看做一个三元组:R<U,F>
当且仅当U上的一个关系R满足F时,r称为关系模式R<U,F>的一个关系

第一范式

作为一个二维表,关系要符合一个最基本的条件:每一个分量必须是不可分的数据项.满足了这个条件的关系模式就属于第一范式(1NF).

1NF关系模式缺陷

>
1. 数据冗余,每一个系的系主任重复出现重复次数与成绩出现次数相同.
2. 更新异常,比如更换系主任后,必须修改与该系学生有关的每一个元组.
3. 插入异常,如果一个系刚刚成立,尚无学生,则无法把这个系及系主任信息存入数据库.
4. 删除异常,如果某个系的学生全部毕业了,则在删除该系学生信息同时会删除系主任信息.

Sno Sdept Cno Grade Mname S1 计算机系 C1 90 张明 S2 计算机系 C1 80 张明 S3 计算机系 C1 70 张明

为什么会出现这样的问题?
F{Sno->Sdept,Sdept->Mname,(Sno,Cno)->Grade}
属性之间存在复杂的函数依赖

规范化

函数依赖

函数依赖是一个关系内部属性与属性之间的一种约束条件.这种约束关系是通过属性间相关联系.它是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现.
如Sname=f(Sno)即Sno函数决定Sname或Sname函数依赖于Sno
设R(U)是属性集U上的关系模式,X,Y是U的子集,对于R(U)的任意一个可能的关系R,R中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等.
X->Y,但Y不包含于X,则称X->Y是非平凡的函数依赖
X->Y,但Y包含于X,则称X->是平反的函数依赖
在R(U)中,如果X->Y,并且对于X的任何一个真子集X’,都有X’->Y,则称Y对X完全函数依赖.
若X->Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖
R(U)中,如果X->Y(Y不包含于X),Y不能->X,Y->Z,Z不包含于Y,则称Z对X传递函数依赖.
这里要追加条件Y不能->X,是因为如果Y->X则X<–>Y,实际上是X直接->Z是直接函数依赖而不是传递函数依赖.

候选码

设K为R<U,F>中的属性或者属性组合,若K -F-> U(U完全依赖K),则K为R的候选码.注意U是完全函数依赖于K,而不是部分函数依赖于K.如果U部分函数依赖于K,即K-p->U则K为超码.候选码是最小的超码,即K的任意一个真子集都不是候选码.
若候选码多于一个,则选中其中的一个为主码.
包含在任何一个候选码中的属性称为主属性;不包含在任何候选码中的属性称为非主属性或非码属性.
关系模式R中属性或者属性组X并非R的码,但X是另一个关系模式的码.则称X是R的外部码,也称外码.

范式

关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式.一个低一级的关系模式通过模式分解可以转换为若干个高一级范式的关系模式的集合,这个过程叫做规范化.

1NF

作为一个二维表,关系要符合一个最基本的条件:每一个分量必须是不可分的数据项.满足了这个条件的关系模式就属于第一范式(1NF).

2NF

若R属于1NF,且每一个非主属性完全函数依赖任何一个候选码,则R属于2NF.
非2NF:
SLC(Sno,Sdept,Sloc,Cno,Grade)码为(Sno,Cno)其中有函数关系:
(Sno,Cno)-F->Ggrade
Sno->Sdept,(Sno,Cno)-P->Sdept
Sno->Sloc,(Sno,Cno)-P->Sloc
Sdept->Sloc

可以看到非主属性Sdept和Sloc并不完全函数依赖于码
分析可知,问题在于有两类非主属性,一类如Grade,它对码是完全函数依赖,另一类如Sdept,Sloc,它们对码不是完全函数依赖.解决方法是用投影把关系模式SLC分解为两个关系模式:SC(Sno,Cno,Grade)和SL(Sno,Sdept,Sloc)这样就满足第二范式了.

3NF

设关系模式R<U,F>属于1NF,若R中不存在这样的码X,属性组Y及非主属性Z,使得X->Y,Y->Z成立,Y->X,则称R<U,F>属于3NF.
可以证明,若R属于3NF,则每一个非主属性既不传递依赖于码,也不部分依赖于码.
在上述已经分解过的SC和SL中,SC没有传递依赖,而SL存在非主属性对码的传递依赖.Sno->Sdept,Sdept->Sloc,可得Sno-传递->Sloc.因此SC属于3NF而SL不属于第三范式.
解决方法:SL分解为SD(Sno)和DL(Sdept,Sloc),分解后的SD和DL不再传递依赖.

BCNF

BCNF是修正的第三范式,有时也称为扩充的第三范式.

关系模式R<U,F>属于1NF,若X->Y且Y不包含于X时X必含有码,则R<U,F>属于BCNF.

也就是说,关系模式R中,若每一个因素都包含码,则R属于BCNF

每一个决定因素都包含码的意思是:每一个依赖的决定因素都是候选码,不允许候选码以外的东西对非主属性起决定性作用

一个满足BCNF的关系模式有:
所有非主属性对每一个码都是完全函数依赖.
所有主属性对每一个不包含它的码也是完全函数依赖.
没有任何属性完全函数依赖于非码的任何一组属性.

区分BCNF和3NF

3NF:每个非主属性既不部分依赖于码也不传递依赖于码
BCNF:每个决定因素都含有码
BCNF消除了可能存在主属性对主码的部分及传递依赖。
例子:关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程,每一个教师只教一门课,每门课有若干教师,某一学生选定某门课,就对应一个固定的教师,由语意可得如下函数依赖.
(S,J)->T,(S,T)->J,T->J;在这里(S,J),(S,T)都是候选码.STJ是3NF因为没有任何非主属性对码传递依赖或者部分依赖,但STJ不是BCNF关系,因为T是决定因素,而T不包含码.即T不是候选码.
3NF和BCNF是在函数依赖的条件下对模式分解所能打到的分离测度,一个模式中的关系模式如果都属于BCNF,那么在函数依赖范畴内它已经实现了彻底的分离,已消除了插入和删除的异常.3NF的不彻底性表现在可能存在主属性对码的部分依赖和传递依赖.

4NF

多值依赖

设 R(U)是属性集U上的一个关系模式,X,Y,Z是U的子集,并且Z=U-X-Y.关系模式R(U)中多值依赖X->->Y成立,当且仅当R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关.
例子:关系模式WSC(W,S,C)中,W表示仓库,S表示保管员,C表示商品.假设每个仓库有若干个保管员,有若干种商品.每个保管员保管所在仓库的所有商品,每种商品被所有保管员保管.
按照语意对W的每一个值Wi,S有一个完整的集合与之对应而不问C取何值,所以W->->S

4NF定义

关系模式R<U,F>属于1NF,如果对于R的每个非平凡多值依赖X->->Y,X都含有码,则称R<U,F>属于4NF
4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖.因为根据定义,对于每一个非平凡的多值依赖X->->Y,X都有候选码,于是就有X->Y,所以4NF所允许的非平凡的多值依赖实际上是函数依赖.
以之前的WSC为例,WSC不属于4NF,但是WSC属于BCNF.对于WSC的某个关系,若某一仓库Wi有n个保管员,存放m件物品,则关系中分量为Wi的元组数目一定有m*n个.每个保管员重复存储m次,每种物品重复存储n次,数据冗余大,可以使用投影方法消去非平凡且非函数依赖的多值依赖.例如把WSC分解为WS(W,S),WC(W,C).在WS中虽然有W->->S,但这是平凡的多值依赖.WS中已不存在非平凡的非函数依赖的多值依赖.

规范化小结

1NF->2NF:消除非主属性对码的部分函数依赖
2NF->3NF:消除非主属性对码的传递函数依赖
3NF->BCNF:消除主属性对码的部分和传递函数依赖
BCNF->4NF:消除非平反且非函数依赖的多值依赖.

0 0
原创粉丝点击