数据库管理系统中的函数依赖
什么是函数依赖
函数依赖在数据库管理系统(DBMS)中,顾名思义,是表属性之间相互依赖的关系。由E. F. Codd提出,它有助于防止数据冗余并识别不良设计。
为了透彻理解这个概念,让我们假设 P 是一个具有属性A和B的关系。函数依赖用->(箭头符号)表示。
那么以下将用箭头符号表示属性之间的函数依赖:
A -> B |
以上表示:
示例
以下示例将有助于理解函数依赖:
我们有一个<部门>表,其中包含两个属性:DeptId和DeptName。
DeptId = 部门ID DeptName = 部门名称 |
DeptId是我们的主键。这里,DeptId唯一标识DeptName属性。这是因为,如果您想知道部门名称,首先需要知道DeptId。
DeptId | DeptName |
001 | 财务部 |
002 | 市场部 |
003 | 人力资源部 |
因此,DeptId和DeptName之间的上述函数依赖可以确定为DeptId函数依赖于DeptName:
DeptId -> DeptName |
函数依赖的类型
函数依赖有三种形式:
- 平凡函数依赖
- 非平凡函数依赖
- 完全非平凡函数依赖
让我们从平凡函数依赖开始:
平凡函数依赖
当 B 是 A 的子集时,就会发生这种情况:
A ->B |
示例
我们考虑同一个具有两个属性的<部门>表来理解平凡依赖的概念。
以下是平凡函数依赖,因为DeptId是DeptId和DeptName的子集
{ DeptId, DeptName } -> Dept Id |
非平凡函数依赖
当 B 不是 A 的子集时,就会发生这种情况:
A ->B |
示例
DeptId -> DeptName |
以上是非平凡函数依赖,因为DeptName不是DeptId的子集。
完全非平凡函数依赖
当 A 与 B 的交集为空时,就会发生这种情况:
A ->B |
Armstrong公理函数依赖的性质
Armstrong公理性质由William Armstrong于1974年提出,用于推论函数依赖。
该性质提出了如果满足以下条件则成立的规则:
- 传递性如果A->B且B->C,则A->C,即传递关系。
- 自反性如果B是A的子集,则A->B。
- 增强性最后一条规则表示:如果A->B,则AC->BC。
广告