第4讲关系模式的规范化第5章关系数据库模式设计例:R=(S#,C#,GRADE,TNAME,TADDR),F={C#TNAME,(S#,C#)GRADE,TNAMETADDR}主要问题:C#TNAMEC#TNAMETNAMETADDRC#TADDR(S#,C#)TADDR到底什么样的关系模式是最优的?标准是什么?如何实现?主要内容范式第一范式第二范式第三范式BCNF范式之间的关系和关系模式的规范化向3NF的模式分解算法一、范式衡量关系模式好坏的标准就是关系模式的范式(NormalForms,简记为NF)。可以把范式的概念理解为符合某一条件的关系模式的集合。在一个关系模式R中,如果R的每一个属性的值域中的值都是不可再分的最小数据单位,则称R是第一范式(1NF)的模式,也称R∈1NF。二、第一范式(1NF)1NF是最基本的范式,满足1NF的关系称为规范化的关系,否则,称为非规范化的关系。例:R=(S#,C#,GRADE,TNAME,TADDR),F={C#TNAME,(S#,C#)GRADE,TNAMETADDR}S#C#GRADETNAMETADDR200401001C401001C402002C403001909085徐浩李阳洋宋歌a1b1c1200401002C401001C4020027588徐浩李阳洋a1b1200401003C40200269李阳洋b1200402001C40100487徐浩a1结论:R不是1NF模式二、第一范式(1NF)(续1)解决方法对于有子表的非规范关系,一般采用重复所在行的其它属性的值,增加新的记录,从而把子表中的值分开,将非规范关系转换成规范关系。二、第一范式(1NF)(续2)例:R=(S#,C#,GRADE,TNAME,TADDR),F={C#TNAME,(S#,C#)GRADE,TNAMETADDR}S#C#GRADETNAMETADDR200401001C401001C402002C403001909085徐浩李阳洋宋歌a1b1c1200401002C401001C4020027588徐浩李阳洋a1b1200401003C40200269李阳洋b1200402001C40100487徐浩a1200401001C40100190徐浩a1200401001C40200290李阳洋b1200401001C40300185宋歌c1200401002C40100175徐浩a1200401002C40200288李阳洋b1结论:R是1NF模式二、第一范式(1NF)(续3)三、第二范式(2NF)定义:如果一个关系模式R是1NF,且它的每一个非主属性都完全函数依赖于候选键,那么称R是满足第二范式(2NF)的关系模式。例:R=(S#,C#,GRADE,TNAME,TADDR),F={C#TNAME,(S#,C#)GRADE,TNAMETADDR}三、第二范式(2NF)(续1)学号(S#)课程号(C#)教师名(TNAME)部分依赖结论:R不是2NF模式S#C#GRADETNAMETADDR200401001C40100190徐浩a1200401001C40200290李阳洋b1200401001C40300185宋歌c1200401002C40100175徐浩a1200401002C40200288李阳洋b1200401003C40200269李阳洋b1200402001C40100487徐浩a1例:R=(S#,C#,GRADE,TNAME,TADDR),F={C#TNAME,(S#,C#)GRADE,TNAMETADDR}三、第二范式(2NF)(续2)学号(S#)课程号(C#)成绩(GRADE)教师名(TNAME)教师住址(TADDR)R1R2例:R=(S#,C#,GRADE,TNAME,TADDR),F={C#TNAME,(S#,C#)GRADE,TNAMETADDR}三、第二范式(2NF)(续3)例:R1(S#,C#,GRADE),F1={(S#,C#)GRADE}R2(C#,TNAME,TADDR),F2={C#TNAME,TNAMETADDR}C#TNAMETADDRC401001徐浩a1C402002李阳洋b1C403001宋歌c1C401004徐浩a1S#C#GRADE200401001C40100190200401001C40200290200401001C40300185200401002C40100175200401002C40200288200401003C40200269200402001C40100487三、第二范式(2NF)(续4)结论:R1和R2是2NF模式r2r1结论:R2中仍然存在数据冗余和操作异常四、第三范式(3NF)定义:如果一个关系模式R属于1NF,且R的任何一个非主属性都不传递依赖于R的候选键,那么称R是满足第三范式(3NF)的关系模式。例:R1(S#,C#,GRADE),F1={(S#,C#)GRADE}R2(C#,TNAME,TADDR),F2={C#TNAME,TNAMETADDR}结论:R1是3NF模式R2不是3NF模式四、第三范式(3NF)(续1)例:R2(C#,TNAME,TADDR),F2={C#TNAME,TNAMETADDR}R21(C#,TNAME),F21={C#TNAME}R22(TNAME,TADDR),F22={TNAMETADDR}课程号(C#)教师名(TNAME)教师住址(TADDR)四、第三范式(3NF)(续2)例:在关系模式R(CITY,STREET,ZIP)中,候选键为{CITY,STREET}和{ZIP,STREET},F={{CITY,STREET}→ZIP,ZIP→CITY}。结论:R是3NF模式举例:CITYSTREETZIP主属性对候选键的部分依赖五、BCNF定义:设有关系模式R(U,F),F是R上的函数依赖集,X和A是U的子集,且A不是X的子集。如果对于F中的每一个函数依赖X→A,X都是R的一个候选键,则称R是鲍依斯-柯德范式,记为BCNF。结论:R不是BCNF模式五、BCNF(续)例:R(CITY,STREET,ZIP),候选键为{CITY,STREET}和{ZIP,STREET}F={{CITY,STREET}→ZIP,ZIP→CITY}。六、范式之间的关系和关系模式的规范化是3NF的关系模式,是否一定就是2NF模式思考是BCNF的关系模式,是否一定就是3NF模式1、定理定理5.6:一个3NF的关系模式一定是2NF的。定理5.7:一个BCNF的关系模式一定是3NF的。证明:用反证法。设R是3NF的,但不是2NF的,那么一定存在非主属性A、候选键X和X的真子集Y,使得Y→AX→Y与假设矛盾,所以R也是2NF的。证毕。X→A2、范式之间的关系消除非主属性对侯选键的部分函数依赖消除非主属性对侯选键的传递函数依赖1NF2NF3NFBCNF消除主属性对侯选键的部分或传递函数依赖3、关系模式的规范化关系模式的规范化就是通过对模式进行分解,将一个属于低级范式的关系模式转换成若干个属于高级范式的关系模式的过程,从而解决或部分解决数据冗余、更新异常等问题。七、向3NF的模式分解算法算法5.5一个关系模式向3NF的保持依赖性的分解输入:关系模式R(U,F),R上的函数依赖集F(最小依赖集)输出:R的一个保持依赖的分解ρ={R1,R2…,Rk},每个Ri为3NF(i=1,2,…,k)。方法:七、向3NF的模式分解算法(续1)(1)若有函数依赖X→AF,且XA=R,则ρ={R},转(5);(2)找出R的不在F中出现的所有属性,并把这些属性构成一个关系模式。然后把这些属性从U中去掉,将剩余的属性仍记为U。(3)对F中的函数依赖按具有相同左部的原则进行分组,并按合并规则将每一组合并成一个新的函数依赖。比如若有X→A1,X→A2,…,X→Am,则可以将它们合并成X→A1A2…Am。(4)对于F中的每一个X→Y,都构成一个关系模式Ri=XY。(5)停止分解,输出ρ。F是最小函数依赖集C#,TNAMES#,C#,GRADETNAME,TADDRρ={R1(C#,TNAME),R2(S#,C#,GRADE),R3(TNAME,TADDR),},保持依赖性例:R=(S#,C#,GRADE,TNAME,TADDR),F={C#TNAME,(S#,C#)GRADE,TNAMETADDR}七、向3NF的模式分解算法(续2)七、向3NF的模式分解算法(续3)定理5.9向3NF的无损联接并保持依赖的分解设={R1,R2…,Rk}是由算法5.5得到的R的3NF分解,X是R的一个候选键,则={R1,R2…,Rk,X}也是R的一个分解。分解中的所有关系模式是3NF的,且分解保持依赖和具有无损联接性。ρ={R1(C#,TNAME),R2(S#,C#,GRADE),R3(TNAME,TADDR),},保持依赖性结论:该分解保持依赖和具有无损联接性例:R=(S#,C#,GRADE,TNAME,TADDR),F={C#TNAME,(S#,C#)GRADE,TNAMETADDR}七、向3NF的模式分解算法(续4)小结消除非主属性对侯选键的部分函数依赖消除非主属性对侯选键的传递函数依赖1NF2NF3NFBCNF消除主属性对侯选键的部分或传递函数依赖保证数据库中各关系模式属于2NF是数据库逻辑设计中的最低要求。在多数情况下,数据库模式中的关系模式要求达到3NF。关系模型的规范化设计方法从语义的角度,确定每个关系模式的函数依赖集;求每个关系模式的函数依赖集的最小依赖集,确定每个模式的候选键;分析关系模式中存在的属性对侯选键的部分和传递依赖,确定规范级别;进行模式分解,必须保证分解的两个特性,即无损联接和保持依赖。小结(续)知识体系问题原因方法函数依赖模式分解规范化理论解决途径本章总结