deleted
不好的关系模式可能存在的问题:
1、数据冗余
2、更新异常(update anomalies)
3、插入异常(insertion anomalies)
4、删除异常(deletion anomalies)
一个好的模式应当不会发生后三种异常,数据冗余应尽可能少。
1.函数依赖(Functional Dependency)
设R(U)是属性集U上的关系模式,X,Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作X→Y。
几个相关概念见P180
2.完全函数依赖
在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有Y不依赖于X’,则称Y对X完全函数依赖。
非完全函数依赖的函数依赖关系称为部分函数依赖(partial functional dependency)。
3.传递函数依赖
在R(U)中,若Y非平凡的函数依赖于X,X不函数依赖于Y,并且Z非平凡的函数依赖于Y。则称Z对X传递函数依赖(transitive functional dependency)。
注意这里有“X不函数依赖于Y”的约束条件,若不然,则X、Y互相函数依赖,实际上是Z直接函数依赖于X,是直接函数依赖而不是传递函数依赖。
以下用函数依赖的概念来定义码。
1.设K为R<U,F>中的属性或属性组合,若U完全函数依赖于K,则K为R的候选码(candidate key)。
若候选码多于一个,则选定其中一个为主码(primary key)。
包含在任何一个候选码(注意是候选码而非主码)中的属性称为主属性(prime attribute).
不包含在任何候选码中的属性称为非主属性(nonprime attribute)或非码属性(non-key attribute)。
整个属性组是码的情况称为全码(all-key).
2.关系模式R种属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外码(foreign key)。
关系数据库中的关系是满足一定要求的,满足不同程度要求的为不同范式。
一个低一级范式的关系模式通过模式分解(schema decomposition)可以转换为若干个高一级范式的关系模式的集合,该过程称为规范化(normalization).
2NF:
若R∈1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R∈2NF。