关系型数据库设计范式

NF1

每一个属性(每一列)都是不可再拆分的。类似通过json字符串保存一个object/array到一列中,就是很不合理的设计。

NF2

  • 完全函数依赖:属性组X确定的情况下,属性y就可以确定,则称y函数依赖于X,如果对于X的任意真子集X1,依赖不成立,则称y完全函数依赖于X,否则称部分函数依赖。
  • 码(key):码是属性组(可以多于一列),当一个属性组确定之后,这一行的所有其他属性都可以确定,那这个属性组就是码。
  • 主属性:码中的属性就是主属性,其余的就是非主属性。
  • NF2:NF1的基础上,没有非主属性对码的部分函数依赖。
    • 第一步:找出数据表中所有的码。
    • 第二步:根据第一步所得到的码,找出所有的主属性。
    • 第三步:数据表中,除去所有的主属性,剩下的就都是非主属性了。
    • 第四步:查看是否存在非主属性对码的部分函数依赖。
  • 如果不满足NF2,通过拆分表,使之满足NF2的过程,成为模式分解。

NF3

  • 在NF2的前提下,消除非主属性对码的传递函数依赖。

BCNF

  • 消除主属性对码的部分函数依赖、传递函数依赖。

参考资料

results matching ""

    No results matching ""