数据库SQL——函数依赖
在现实世界中数据通常有各种各样的约束。一个关系的满足所有这种真实世界约束的实例被称为该关系的合法实例。
码和函数依赖
1.码
一些最常用的真实世界的约束类型可以被形式化的表示为码。超码是能够一起来唯一标识出关系中的一个元组的一个或多个属性的合集。换句话说,如果在关系r(R)的任何合法实例中,不存在两个元组在属性集K上具有相同的值,即一个K能唯一标识出一个元组。
2.函数依赖
设关系R(U,F),其中U是属性集,F是函数依赖集。
对于U中的任意两个子集X和Y,如果对于关系R中的任意两个元组,它们在X上的属性值相同,则它们在Y上的属性值也必须相同。
则称“X函数决定Y”或“Y函数依赖于X”,记作X→Y。
其实就是一个属性能决定另一个属性。
A | B |
---|---|
1 | 2 |
1 | 4 |
2 | 7 |
4 | 9 |
在这个例子中B->A成立。A->B不成立
函数依赖的类型:
- 平凡函数依赖:如果Y是X的子集,则X→Y是平凡的函数依赖。这意味着,如果一个属性集Y完全包含在另一个属性集X中,那么X的值自然能唯一确定Y的值。换句话说,所有的样本不需要评估就可以完成依赖,比如:name->name,或者ID,name->name, 即后边的属性通常是前边属性的子集
- 非平凡函数依赖:如果Y不是X的子集,则X→Y是非平凡函数依赖。这种依赖关系表明,X的值能唯一确定Y的值,但Y并不包含在X中。
进一步分类:
- 完全函数依赖:如果对于X的任何真子集X'(即X的一部分属性),都不满足X'→Y,则称Y对X完全函数依赖。换句话说,只有X的所有属性一起才能唯一确定Y的值。记作
- 部分函数依赖:如果X的某个真子集X'可以决定Y,则称Y对X部分函数依赖。这表示,X的一部分属性就足以唯一确定Y的值。记作
- 传递函数依赖:如果X→Y,Y→Z,但Y不依赖于X(即Y不是X的子集或X不能唯一确定Y),则称Z对X传递函数依赖。这表示,X的值能间接地通过Y唯一确定Z的值。记作
三范式
范式是数据库设计中的一种规范化标准,用于指导如何设计一个结构良好的数据库表。三范式(3NF)是其中的一种重要范式,它要求关系模式满足特定的条件以确保数据的规范化和一致性。
- 第一范式(1NF):要求关系模式中的每一个属性都是原子的,即不可再分的。这是关系模式规范化的最低要求。
- 第二范式(2NF):在满足第一范式的基础上,要求关系模式中的每一个非主属性都完全函数依赖于主键。这意味着,如果一个属性不是主键的一部分,那么它必须完全依赖于主键,而不能部分依赖于主键的某个子集。通过消除部分函数依赖,第二范式有助于减少数据冗余和避免插入、删除、修改异常。
- 第三范式(3NF):在满足第二范式的基础上,要求关系模式中的每一个非主属性都不传递依赖于主键。这意味着,如果一个属性依赖于另一个属性,而那个属性又依赖于主键,则这个属性应该被分解出来形成一个新的关系模式。通过消除传递函数依赖,第三范式进一步减少了数据冗余和提高了数据的完整性。
B-C范式:
BC范式要求,在关系模式R中,如果每一个非平凡多值依赖X→→Y(X,Y均不为空)的X都含有候选键,则称R满足BC范式。换句话说,只要属性或属性组A能够决定任何一个属性B,则A的子集中必须有候选键(或者说A必须为超键)。必须包含函数依赖,其中决定因素必须含有码 。