一、为什么要关系模式规范化?
- 数据冗余大
- 插入异常
- 删除异常
- 更新异常(修改困难,容易造成数据的不一致性)
二 、函数依赖定义
如果有关系模式R(A1,A2, ……,An), X和Y为{A1,A2,……An}的子集,则对于关系R中的任意一个X值,都只有一个Y值与之对应,则称X函数决定Y,或Y函数依赖于V.
例:
对学生关系模式 Student (sid,sname,age)
有以下依赖:
sid →sname, sid —→age
三、关系规范化
候选码:设K为R(U,F)中的属性或属性组,若K完全决定U,则K为R的候选码
主码:关系R(U,F)中可能有多个候选码,则选其中一个座位主码
全码:候选码为整个属性组
包含在任一候选码中的属性称为主属性,不包含在任一候选码中的属性称为非主属性
例:学生(学号,姓名,性别,身份证号,年龄,所在系)
- 候选码:学号,身份证号
- 主码:学号 或 身份证号
- 主属性:学号,身份证号
- 非主属性:姓名,性别,年龄,所在系
外码外码:用于关系表之间建立关联的属性(组)
四、范式
范式:关系数据库中的关系要满足一定的要求,满足不同程度要求的为不同的范式(Normal Form)
范式的种类
- 第一范式(1NF)
- 第二范式(2NF)
- 第三范式(3NF)
第一范式:不包含重复组的关系,关系的每个分量必须是不可再分的数据项
说明: - 属性不可再分(不允许出现嵌套的属性定义)
- 属性下的值不可再分(不允许出现多个值)
第二范式:
如果R(U,F)∈1NF,并且R中的每个非主属性都完全函数依赖于主码,则R(U,F)∈2NF
例:S-L-C(sid,sdept,sloc,cid,grade)
仅属于2NF的关系模式可能会产生的问题: - 数据冗余
- 插入异常
- 删除异常
- 修改困难
第三范式:如果R(U,F)∈2NF,并且所有非主属性都不传递依赖于主码,则R(U,F)∈3NF
五、Boyce-Codd范式
定义:若R∈1NF,且对任何非平凡的函数依赖X→Y,X必包含码,则R∈BCNF
若R∈1NF,并且R中不存在任何属性传递函数依赖于R的某个值,则称R∈BCNF
若R∈BCNF,则R∈3NF(若R∈1NF,并且R中不存在任何非主属性传递函数依赖于R的某个码,则称R∈3NF)
从完全函数依赖的观点看,属于BCNF的关系模式满足:
- 所有非主属性对每一个码都是完全函数依赖
- 所有主属性对每一个不包含他的码也是完全函数依赖
- 所有任何属性完全函数依赖不是码的任何一组属性
六、范式小结
1.规范化的目的
解决:数据冗余、插入异常、删除异常、修改困难等问题
2.规范化的基本思想
逐步消除不合适的数据依赖,让一个关系描述一个概念、一个实体或实体间的一种联系
Armstrong公理系统
1.逻辑蕴涵
设F是关系模式R<U,F>的函数依赖集,X、Y是R的属性子集。如果在R<U,F>上函数依赖X→Y成立,则称F逻辑蕴涵X→Y
2.Armstrong公理
对关系模式R<U,F>,有以下的推理规则:
自反律:若Y⊆X⊆ U,则 X→Y为F所蕴涵(若Y⊆ X,则X→Y)
增广律:若X→Y为F所 蕴涵,且Z⊆ U,则XZ→YZ为F所蕴涵(若X→Y,则XZ→YZ)
传递律:若X→Y和Y→Z为F所蕴涵,则X→Z为F所蕴涵 (若X→Y、Y→Z,则X→Z)
3.Armstrong公理的推论
(一)合并规则:由X→Y,X→Z,有X→YZ
(二)分解规则:由X→Y及Z⊆ Y,有X→Z
(三)伪传递规则:由X→Y,WY→Z,有XW→Z
4.函数依赖集的闭包
闭包:在关系模式R<U,F>中F所逻辑蕴涵的函数,依赖的全体称为F的闭包,记做:F+
属性集的闭包:设关系模式R<U,F>,X⊆ U,X关于函数依赖集F的闭包为:X+F
函数依赖集的闭包是一个(更大的)函数依赖集
属性集的闭包是一个(更大的)属性集合
5.求闭包X+F的算法:
Armdtrong公理
若Y⊆ X,则X→Y
若X→Y,则XZ→YZ
若X→Y、Y→Z,则X→Z
算法:
输入: X,U,F
输出:X关于F的闭包
(一)初始:令X(0)=X,i=0;
(二)迭代:求B={A|(∃V)(∃W)(V→W∈FV⊆X(I)^^A∈W)};X(i+1)=B∪X(i)
(三)判断:X(i+1)=X(i)?
若相等或X(i)=U,转一下步
否则,用i+1取代i,转第(二)步继续迭代;
(四)结束:X(i)就是F+F
每次迭代都添加属性到当前闭包(不增加时算法就结束)故至多迭代|U|-|X|次算法终止