《关于表的规范化18903.docx》由会员分享,可在线阅读,更多相关《关于表的规范化18903.docx(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、规范化:满足第一范范式是表的的最低要求求,不满足足第一范式式要求的数数据库(表表)就不能能称之为关关系数据库库。在此基基础上满足足更高要求求的称为第第二范式,简简记为2NNF,其余余依此类推推,还有第第三范式(3NF)、BC范式(BCNF)、第四范式(4NF)、第五范式(5NF)。BCNF可以看作是修正了的第三范式。把表从低范范式,通过过投影运算算转换成若若干高一级范式式的过程,叫叫做表的规规范化。一般地说,表表满足的范范式级别越越高,设计计的表越是是规范,表表的质量越越高,数据据的冗余度度越小,共共享性越高高,所占的的存储空间间越少,并并将数据的的不一致性性减少到最最低程度,这这也是对表表进
2、行规范范化的目的的。但是,高高范式的数数据库查询询起来比较较复杂。所所以,不应应一味追求求高范式,一般满足第三范式或BC范式就可以了二、表的规规范化1、第一范范式(1NNF)如前所述,第第一范式要要求表的每每一个字段段都是不可可再分的最最小单位。例1:学生生(学号,姓姓名,学院院,地址,选选修课程成成绩(课程程号,课程程名,成绩绩)表数数据如下:学号姓名学院地址选修课程成成绩(课程程号,课程程名,成绩绩)9901张丽管理管201C001,高高等数学,909901张丽管理管201C002,英英语,8009901张丽管理管201C003,计计算机,6669902李锋电子电101C004,法法律,7
3、88表一 不满满足第一范范式的表显然,这样样的表是不不满足第一一范式的。因因为选修课程程成绩字段还可可分为3个字段即即(课程号号,课程名名,成绩)。如果不把它它进行规范范化,即转转换成满足足第一范式式的表,将将会产生很很多问题,如如:删除异异常,即本本来只想删删除成绩的的,不得不不把课程号号和课程名名也删除了了!转换的方法法就是把可可以拆分的的字段进行行拆分,即即把选修课程程成绩分解成3个字段:课程号,课程名,成绩。变成下下面满足第第一范式的的表:学号姓名学院地址课程号课程名成绩9901张丽管理管201C001高等数学909901张丽管理管201C002英语809901张丽管理管201C003
4、计算机669902李锋电子电101C004法律78表二 满满足第一范范式的表2、第二范范式(2NNF)一个关系应应满足1NNF是最起起码的条件件。但是,仅仅满足1NNF的关系系还可能存存在一些问问题。例2:表二二中存在以以下的问题题:l 问题题1:数据冗冗余度大。张张丽选几门门课程,都都必须输入入所有几个个她的相关关信息,同同时,如果果有几千个个人选修高高等数学课课,就得输输入几千个个“高等数学学”。如果要要修改“高等数学学”这个课程程名称,对对于几千个个课程名中中,只要漏漏改一个,将将造成数据据的不一致致性。l 问题题2:删除异异常。我们们知道,这这个表中的的关键字为为学号和课课程号,它它们
5、不能为为空值,而而当李锋退退学时,不不可能只删删除李锋的的学号和姓姓名,只能能删除了李李锋的整条条记录,这这时相应的的课程号为为C0044的法律也也被删除,如如果这个表表中只有李李锋一人选选法律课,该该记录删除除后,下次次将无法查查询法律课课的课程号号。l 问题题3:插入记记录异常。与与删除异常常相似,如如果李锋刚刚入学,还还没有选修修任何一门门课程,无无法知道他他选修的课课程号,而而课程号为为关键字,不不能为空,因因此,李锋锋这个记录录也不能输输入。造成出现这这些问题的的原因是因因为这个表表不满足第第二范式。l 如何何判断一个个表是否满满足第二范范式呢,判判断方法是是:(1)、找找出表的关关
6、键字。(2)、如如果只有一一个关键字字,若每一一个非关键键字都依赖赖于这个关关键字,则则表满足第第二范式,否否则不是。什么是依赖赖(关系)呢呢?例:某某表中有两两个字段:学号、姓姓名,对于于每一个学学号,只有有一个姓名名与之对应应,则称姓姓名依赖于于学号,或或称学号唯唯一确定姓姓名,记作作:学号姓名。例3:学生生(学号,姓姓名,学院院)表是否否满足第二二范式?答:满足。因因为,这个个表中只有有一个关键键字即学号号,而其他他字段(即即非关键字字)都依赖赖于学号,也也就是说每每一个学号号只有一个个姓名,一一个学院与与之对应。例4:学生生(学号,姓姓名,学院院,成绩)表表是否满足足第二范式式?答:不
7、满足足。因为,一一个学生可可能不只选选一门课程程,不止一一个成绩,也也就是说每每一个学号号不只有一一个成绩与与之对应,或或者说,有有一个非关关键字段(即即成绩)不不依赖于学学号。(3)、如如果有两个个或两个以以上的关键键字,那么么,把这些些关键字看看成是一个个组合关键键字,若每每一个非关关键字都能能完全依赖赖于组合关关键字,则则表满足第第二范式,否否则不是。例5:成绩绩(学号,课课程,成绩绩)表是否否满足第二二范式?满足。因为为,非关键键字(成绩绩)完全依依赖于组合合关键字(学学号+课程),即即只有一个个成绩与(学学号+课程)对对应,或者者说,一个个学生选修修一门课程程,就只能能有一个成成绩。
8、称为部分依依赖。l 定义义:如果一一个表满足足1NF,且且每一个非非关键字都都完全依赖赖于关键字字,则这个个表满足第第二范式。l 第一一范式转换换成第二范范式的方法法:找出依赖关关系,将能能完全依赖赖于主键的的字段从表表中提取出出来,同主主键一起组组成一个新新的关系。 例7:表二(学学号,姓名名,学院,地地址,课程程号,课程程名,成绩绩)的依赖赖关系如下下:显然,不不满足2NNF。院、地址)绩绩)转换的过程程就是拆分分的过程,也也是一个消消除部分依依赖的过程程。但是,要要注意,拆分分的结果应应该包含原原表的所有有字段!(即无损损分解)3、第三范范式(3NNF)通过分析,发发现表A仍然在一一定程
9、度上上存在上面面提及的三三个问题,要要消除和减减少它们,还还得把它分分解成满足足更高范式式(即3NNF)的表表.l 满足足第三范式式的判断方方法:判断表在满满足第二范范式的基础础上是否有有传递依赖赖的情况,如如果有,不不是第三范范式,否则则是。l 将非非第三范式式规范为第第三范式的的方法:把产生传递递依赖关系系的非关键键字段抽出出来,同关关键字一起起建立新的的表。例8:表AA(学号,姓名名,学院,地地址)中,存存在地址传传递依赖于于学号的关关系,即:学号学院院,学院地址。把地址从原原表中分出出来,同关关键字一起起建立新的的表形成表表A1(学院、地址址),原表就可可消除了传传递依赖关关系。表AA
10、分解为:表A1 (学院、地址址) 表表A2(学号、姓名名、学院) 小小结:表的的规范化中中,1NFF是要满足足每个字段段都是不可可再分的;2NF是是在1NFF的基础上上消除部分分依赖关系系(只保留留完全依赖赖),3NNF是在22NF的基基础上进一一步消除传传递依赖关关系。二:在设计和操操作维护数数据库时,关关键的步骤骤就是要确确保数据正正确地分布布到数据库库的表中。使使用正确的的数据结构构,不仅便便于对数据据库进行相相应的存取取操作,而而且可以极极大地简化化应用程序序的其他内内容(查询询、窗体、报报表、代码码等)。正正确进行表表设计的正正式名称就就是数据据库规范化化。数据冗余数据应该尽尽可能少
11、地地冗余,这这意味着重重复数据应应该减少到到最少。比比如说,一一个部门雇雇员的电话话不应该被被存储在不不同的表中中, 因为为这里的电电话号码是是雇员的一一个属性。如如果存在过过多的冗余余数据,这这就意味着着要占用了了更多的物物理空间,同同时也对数数据的维护护和一致性性检查带来来了问题,当当这个员工工的电话号号码变化时时,冗余数数据会导致致对多个表表的更新动动作,如果果有一个表表不幸被忽忽略了,那那么就可能能导致数据据的不一致致性。规范化实例例为了说明方方便,我们们在本文中中将使用一一个SAMMPLE数数据表,来来一步一步步分析规范范化的过程程。首先,我们们先来生成成一个的最最初始的表表。CRE
12、ATTE TAABLE SAMMPLE ( PRJNNUM INTEEGER NOT NULLL, PRJNNAME VARRCHARR(2000), EMYNNUM INTEEGER NOT NULLL, EMYNNAME VARRCHARR(2000), SALCCATEGGORY CHAAR(1), SALPPACKAAGE INTEEGER) INN USSERSPPACE11;ALTERR TABBLE SAMPPLE ADD PRIMMARY KEY(PPRJNUUM, EMYYNUM);Inserrt innto SSAMPLLE(PRRJNUMM, PRRJNAMME, EEM
13、YNUUM, EEMYNAAME, SALCCATEGGORY, SALLPACKKAGE)valuees(10000011, TTPMS, 20000011, JJohnsson, A, 20000), (10000011, TTPMS, 20000022,Chriistinne, B, 30000), (1000001, TPPMS, 2000003, Keevin, CC, 44000), (11000002,TCT, 20000011, JJohnsson, A, 20000), (10000022, TTCT, 2000004, Appple, BB,3000);表1-1考察表1-1
14、,我们们可以看到到,这张表表一共有六六个字段,分分析每个字字段都有重重复的值出出现,也就就是说,存存在数据冗冗余问题。这这将潜在地地造成数据据操作(比比如删除、更更新等操作作)时的异异常情况,因因此,需要要进行规范范化。第一范式参照范式的的定义,考考察上表,我我们发现,这这张表已经经满足了第第一范式的的要求。(1NF:字段具有有原子性,不不可再分; 比如说籍贯贯这个字段段,里面是是“湖北武武汉”的话话,它就违违反了原子子性,因为为湖北武汉汉还可以再再分的更具具体,分为为“湖北”和和“武汉” )1、因为这这张表中字字段都是单单一属性的的,不可再再分;2、而且每每一行的记记录都是没没有重复的的;3
15、、存在主主属性,而而且所有的的属性都是是依赖于主主属性;4、所有的的主属性都都已经定义义事实上在当当前所有的的关系数据据库管理系系统(DBBMS)中中,都已经经在建表的的时候强制制满足第一一范式。因因此,这张张SAMPPLE表已已经是一张张满足第一一范式要求求的表。考考察表1-1,我们们首先要找找出主键。可可以看到,属属性对是是主键,其其他所有的的属性都依依赖于该主主键。从一范式转转化到二范范式根据第二范范式的定义义,转化为为二范式就就是消除部部分依赖。(2NF:组合关键字的表,不存在组合关键字中的任意字段决定其它非关键字段(也就是说不能有两个组合键组成一个主键)考察表1-1,我们们可以发现现
16、,非主属属性部部分依赖于于主键中的的; 非主主属性,和和都部分依依赖于主键键中的;表1-1的的形式,存存在着以下下潜在问题题:1 数据据冗余:每每一个字段段都有值重重复;2 更新新异常:比比如字字段的值,比比如对值TPMSS了修改改,那么就就要一次更更新该字段段的多个值值;3 插入入异常:如如果新建了了一个Prrojecct,名字字为TPTT, 但是是还没有EEmplooyee加加入,那么么将会空空缺,而该该字段是主主键的一部部分,因此此将无法插插入记录;Inserrt innto SSAMPLLE(PRRJNUMM, PRRJNAMME, EEMYNUUM, EEMYNAAME, SALCC
17、ATEGGORY, SALLPACKKAGE) vallues(1000003, TPTT, NNULL, NULLL, NNULL, NULLL)4 删除除异常:如如果一个员员工 20000033, Keevin 离职了,要要将该员工工的记录从从表中删除除,而此时时相关的SSalarry信息 C 也将将丢失, 因为再没没有别的行行纪录下 Salaary CC的信息。Delette frrom ssamplle whhere EMYNNUM = 2000003SSelecct diistinnct SSALCAATEGOORY, SALPPACKAAGE ffrom SAMPPLE因此,我们们
18、需要将存存在部分依依赖关系的的主属性和和非主属性性从满足第第一范式的的表中分离离出来,形形成一张新新的表,而而新表和旧旧表之间是是一对多的的关系。由由此,我们们得到:CREATTE TAABLE PROOJECTT ( PRJNNUM INTEEGER NOT NULLL, PRJNNAME VARRCHARR(2000) INN USSERSPPACE11;ALTERR TABBLE PROJJECT ADD PRIMMARY KEY(PPRJNUUM);Inserrt innto PPROJEECT(PPRJNUUM, PPRJNAAME) valuues(11000001, TPMSS)
19、, (1000002, TCCT);表1-2表表 1-33EMYNUUMEMYNAAMESALCAATEGOORYSALPAACKAGGE2000001Johnsson A 200002000003Kevinn CC 400002000004Applee B 30000CREATTE TAABLE EMPPLOYEEE ( EMYNNUM INTEEGER NOT NULLL, EMYNNAME VARRCHARR(2000), SALCCATEGGORY CHAAR(1), SALPPACKAAGE INTEEGER) INN USSERSPPACE11;ALTERR TABBLE EEMP
20、LOOYEEADD PRIMMARY KEY(EMMYNUMM);Inserrt innto EEMPLOOYEE(EMYNNUM, EMYNNAME, SALLCATEEGORYY, SAALPACCKAGEE) vaaluess(2000001,Johnnson, AA, 22000), (22000002, Chriistinne, B, 30000), (2000003, Keevin, CC,4000), (22000004, Applle, B, 30000);CREATTE TAABLE PRJJ_EMYY ( PRJNNUM INTEEGER NOT NULLL, EMYNNU
21、M INTEEGER NOT NULLL) INN USSERSPPACE11;ALTERR TABBLE PRJ_EMY ADD PRIMMARY KEY(PPRJNUUM, EMYYNUM);Inserrt innto PPRJ_EEMY(PPRJNUUM, EEMYNUUM) vvaluees(10000011, 20000011), (1000001, 2000002),(1000001, 2000003), (10000022, 20000011), (1000002, 2000004);同时,我们们把表1-1的主键键,也就是是表1-22和表1-3的各自自的主键提提取出来,单单独形成
22、一一张表,来来表明表11-2和表表1-3之之间的关联联关系:表 1-44这时候我们们仔细观察察一下表11-2, 1-3, 1-44, 我们们发现插入入异常已经经不存在了了,当我们们引入一个个新的项目目 TPTT 的时候候,我们只只需要向表表1-2 中插入一一条数据就就可以了, 当有新人人加入项目目 TPTT 的时候候,我们需需要向表11-3, 1-4 中各插入入一条数据据就可以了了。虽然我我们解决了了一个大问问题,但是是仔细观察察我们还是是发现有问问题存在。从二范式转转化到三范范式考察表前面面生成的三三张表,我我们发现,表表1-3存存在传递依依赖关系,即即:关键字字段 - 非关键键字段 -非关
23、键键字段。而这是是不满足三三范式的规规则的,存存在以下的的不足:1、 数据据冗余:和的值有有重复;2、 更新新异常:有有重复的冗冗余信息,修修改时需要要同时修改改多条记录录,否则会会出现数据据不一致的的情况;3、 删除除异常:同同样的,如如果员工 2000003 KKevinn 离开了了公司,会会直接导致致 Sallary C 的信信息的丢失失。Delette frrom EEMPLOOYEE wherre EMMYNUMM = 22000003Sellect disttinctt SALLCATEEGORYY, SAALPACCKAGEE froom EMMPLOYYEE因此,我们们需要继续
24、续进行规范范化的过程程,把表11-3拆开开,我们得得到:表 1-55和表 1-66这时候如果果 2000003 Keviin 离开开公司,我我们只需要要从表 11-5 中中删除他就就可以了, 存在于表表1-6中中的Sallary C信息并并不会丢失失。但是我我们要注意意到除了表表 1-55 中存在在 Kevvin 的的信息之外外, 表11-4中也也存在 KKevinn 的信息息, 这很很容易理解解, 因为为 Kevvin 参参与了项目目 1000001, TPMSS, 所以以当然也要要从中删除除。 至此,我们们将表1-1经过规规范化步骤骤,得到四四张表,满满足了三范范式的约束束要求,数数据冗余
25、、更更新异常、插插入异常和和删除异常常。在三范式之之上,还存存在着更为为严格约束束的BC范范式和四范范式,但是是这两种形形式在商业业应用中很很少用到,在在绝大多数数情况下,三三范式已经经满足了数数据库表规规范化的要要求,有效效地解决了了数据冗余余和维护操操作的异常常问题。(3NF:在2NFF的基础上上,数据表表中如果不不存在非关关键字段对对任一候选选字段的传传递函数依依赖则符合合第三范式式(也就是是说违反了了数据冗余余) 帐号 身份份证号 姓姓名 密码码 1001 41011010001 李梅梅 1000001 身份证号和和姓名共同同决定了密密码,姓名名是依赖于于身份证号号的,这样样就违反了了
26、第三范式式).第四范式式(4NFF)(1)第四四范式(44NF)的的定义 在4.33.5中我我们曾分析析了关系CCTB虽然然属于BCCNF,但但还存在着着数据冗余余、插入异异常和删除除异常的弊弊端,究其其原因就是是CTB中中存在非平平凡的的多多值依赖,而而决定因素素不是关键键字。因而而必须将CCTB继续续分解,如如果分解成成两个关系系模式CTTB1(C,TT)和CTTB2(CC,B),则则它们的冗冗余度会明明显下降。从从多值依赖赖的定义分分析CTBB1和CTTB2,它它们的属性性间各有一一个多值依依赖CT,CB,都是是平凡的多多值依赖。因因此,含有有多值依赖赖的关系模模式中,减减少数据冗冗余和
27、操作作异常的常常用方法是是将关系模模式分解为为仅有平凡凡的多值依依赖的关系系模式。 定义义4.9 设有一关关系模式RR(U),UU是其属性性全集,XX、Y是UU的子集,DD是R上的的数据依赖赖集。如果果对于任一一多值依赖赖XY,此此多值依赖赖是平凡的的,或者XX包含了RR的一个候候选关键字字,则称RR是第四范范式的关系系模式,记记为R4NF。由此定义可可知:关系系模式CTTB分解后后产生的CCTB1(C,T)和CTBB2(C,BB)中,因因为CT,CB均是平平凡的多值值依赖,所所以CTBB1和CTTB2都是是4NF。经过上面的的分析可以以得知:一一个BCNNF的关系系模式不一一定是4NNF,而
28、44NF的关关系模式必必定是BCCNF的关关系模式,即即4NF是是BCNFF的推广。(2)4NNF的分解解 把一个关关系模式分分解为4NNF的方法法与分解为为BCNFF的方法类类似,就是是把一个关关系模式利利用投影的的方法消去去非平凡且且非函数依依赖的多什什依赖,并并具有无损损连接性。例7设设有关系模模式R(AA,B,CC,E,FF,G),数数据依赖集集DAABGCC,BAC,CCG,将将分解为44NF。解:利用AABGCC,可将RR分解为的的R的ABCGG,AEFF。利用BAAC分解得得:RABC,BBG,AEEF。由此得到的的三个关系系模式(AABC)、(BBG)和(AAEF)都都属于4N
29、NF,但此此分解丢失失了函数依依赖CG。若最最后一次分分解利用函函数依赖CCG来做,则则RAABC,CCG,AEEF,由由此得到的的三个关系系模式(AABC),(CCG)和(AAEF)都都是属于44NF的关关系模式,且且保持了所所有的数据据依赖。这这说明,44NF的分分解结果不不是惟一的的,结果与与选择数据据依赖的次次序有关。任任何一个关关系模式都都可无损分分解成一组组等价的44NF关系系模式,但但这种分解解不一定具具有依赖保保持性。数据依赖和和多值依赖赖是两种最最重要的数数据依赖。如如果只考虑虑函数依赖赖,则属于于BCNFF的关系模模式的规范范化程度已已经是最高高的了。如如果考虑多多什依赖,则则属于4NNF的关系系模式化程程度是最高高的。事实实上,数据据依赖中除除函数依赖赖和多什依依赖之外,还还有其他数数据依赖。函函数依赖是是多值依赖赖的一种特特殊情况,而而多值依赖赖实际上又又是连接依依赖的一种种特殊情况况。但连接依赖赖不像函数数依赖和多多值依赖那那样可由语语义直接导导出,而是是在关系的的连接运算算时才反映映出来。存存在连接依依赖的关系系模式仍可可能遇到数数据冗余及及插入、修修改、删除除异常的问问题。如果果消除了属属于4NFF的关系模模式中存在在的连接依依赖,则可可以进一步步达到5NNF的关系系模式
限制150内