SQL数据库中有两个功能依赖项.
a)部分功能依赖性:非键列依赖于复合主键中的某些列,但不是所有列.
b)传递函数依赖:任何非键列都依赖于其他非键列.
对于一个好的SQL数据库.
规则1:列仅包含原子值
规则2:没有重复的数据组
规则3:没有部分依赖关系
规则4:没有传递依赖
我已经理解了第1条和第2条规则的要求,为什么我们需要第3条和第4条规则,而不是说no列不应该依赖于其他列.为什么有两个单独的规则(3和4)?
来源:Head First SQL
提前致谢!
解决方法:
好问题.纯粹出于历史和教学原因,这两者经常是分开的.
第二范式(2NF)涉及仅消除部分密钥依赖性.单独的2NF通常不是特别重要,因为第三范式,Boyce Codd Normal Form和更高的正规形式也消除了那些相同的部分密钥依赖性,并且那些NF(> 2NF)通常是数据库设计中的期望目标.然而,通常的做法是使用分解过程来教导归一化.通过分解方法,通常首先考虑部分密钥依赖性.实际上,大多数通常会立即考虑所有依赖关系的实践者很少这样做.
高于2NF的Normal Forms的定义不一定提及部分密钥依赖性作为特殊情况. Boyce Codd Normal Form可以简单地概括为每个非平凡的函数行列式都是超级密钥 – 换句话说,除了密钥之外的任何东西都没有非平凡的FD(任何类型).
标签:mysql,database,sql,database-design
来源: https://codeday.me/bug/20190526/1157415.html