三级数据库第七章考试要点
第七章一、什么是“不好”的关系模式关系模式有如下“毛病”:(1)数据冗余。(2)更新异常(不一致性的危险)。(3)插入异常。如果某供应者没有供应任何货物,则我们无法记录他的名称和地址。(4)删除异常。如果一个供应者供应的所有货物都被删除,则我们无可奈何地丢失了该供应者的名称和地址。二、函数依赖(一)函数依赖的定义设R(A1,A2,…,An)是一个关系模式,X和Y是{A1,A2,…,An}的子集,若只要关系r是关系模式R的可能取值,则r中不可能有两个元组在X上的属性值相等,而在Y上的属性值不等,则称“X函数决定Y”,或“Y函数依赖于X,记作X→Y。注意,函数依赖X→Y的定义要求关系模式R的任何可能的r都能满足上述条件。(二)函数依赖的逻辑蕴含设R〈U,F〉是一个关系模式,X,Y是U中属性组,若在R〈U,F〉的任何一个满足F函数依赖的关系r上,都有函数依赖X→Y成立,则称F逻辑蕴含X→Y。(三)码设K为关系模式R中的属性或属性组,若K→U在F+中,而找不到K的任何一个真子集K′,能使K′→U在F+中,则称K为关系模式R的候选码。当候选码多于一个时,选定其中一个做主码。包含在任何一个候选码中的属性叫做主属性。不包含在任何候选码中的属性叫做非主属性。最简单的情况,单个属性是码。最极端的情况,整个属性组是码,称做全码。(四)函数依赖的公理系统设F是属性组U上的一组函数依赖,于是有如下推理规则:增广律:若X→Y为F所逻辑蕴含,且Z〈U,则XZ→YZ为F所逻辑蕴含。传递律:若X→Y及Y→Z为F所逻辑蕴含,则X→Z为F所逻辑蕴含。注意:由自反律所得到的函数依赖均是平凡的函数依赖,事实上自反律的应用只依赖于U,不依赖于F。根据Armstrong公理系统的3条推理规则可以得到下面3条很有用的推理规则:(1)合并规则:由X→Y,X→Z,有X→YZ。(2)伪传递规则:由X→Y,WY→Z,有XW→Z。三、1NF、2NF、3NF、BCNF(一)第一范式(1NF)及进一步规范化关系模式需要满足一定的条件,不同程度的条件称做不同的范式。最低要求的条件是元组的每个分量必须是不可分的数据项,这叫做第一范式,简称1NF,是最基本的规范化,在第一范式的基础上进一步增加一些条件,则为第二范式。以此类推,还有第三范式,Boyce-Codd范式,等等。函数依赖X→Y不仅给出了对关系的值的限制,而且给出了数据库中应该存储的某种联系:从X的值应该知道与之联系的惟一Y值。若X不含码,则有麻烦了。码是一个元组区别于其他元组的依据,同时也是一个元组赖以存在的条件。在一个关系中,不可能存在两个不同的元组在码属性上取值相同,也不可能存在码或码的一部分为空值的元组。若某关系模式的属性间有函数依赖X→Y,而X又不包含码,那么在具有相同X值的所有元组中,某个特定的Y值就
会重复出现,这是数据冗余,随之而来的是更新异常问题;某个X值与某个特定的Y值相联系,这是数据库中应存储的信息,但由于X不含码,这种X与Y相联系的信息可能因为码或码的一部分为空值而不能作为一个合法的元组在数据库中存在,这是插入异常或删除异常问题。第二范式、第三范式和Boyce-Codd范式就是不同程度地限制关系模式中X不包含码的函数依赖X→Y的存在。(二)第二范式(2NF)若关系模式R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。2NF就是不允许关系模式的属性之间有这样的函数依赖X→Y,其中X是码的真子集,Y是非主属性。即不允许有非主属性对码的部分函数依赖。(三)第三范式(3NF)若关系模式R∈2NF,且每一个非主属性都不传递依赖于码,则R∈3NF。3NF就是不允许关系模式的属性之间有这样的非平凡函数依赖X→Y,其中X不包含码,Y是非主属性。X不包含码有两种情况,一种情况X是码的真子集,这是2NF不允许的,另一种情况X不是码的真子集,这是3NF不允许的。(四)Boyce-Codd范式(BCNF)若关系模式R∈1NF,且对于每一个非平凡的函数依赖X→Y,都有X包含码,则R∈BCNF。BCNF是3NF的进一步规范化,即限制条件更严格。3NF不允许有X不包含码,Y是非主属性的非平凡函数依赖X→Y。BCNF则不管Y是主属性还是非主属性,只要X不包含码,就不允许有X→Y这样的非平凡函数依赖。因此,若R∈BCNF,则必然R∈3NF。然而,BCNF又是概念上更加简单的一种范式,判断一个关系模式是否属于BCNF,只要考察每个非平凡函数依赖X→Y的决定因素X是否包含码就行了。1NF,2NF,3NF,BCNF的相互关系是:BCNF’3NF’2NF’1NF在函数依赖的范畴内,BCNF达到了的规范化程度。
三级数据库第七章考试要点
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)