美文网首页
1NF 2NF 3NF BCNF

1NF 2NF 3NF BCNF

作者: SpringWolfM | 来源:发表于2018-04-21 22:57 被阅读0次
    总结
    • 1NF:

      atomic 要符合原子性
    • 2NF:(数据库通过2NF消除主键的部分依赖)
      E is non-prime attribute. BC is a proper subset of a key.=>violation on 2NF.
      E is non-prime attribute. BC is a proper subset of a key.=>R 是 2NF.
      Proper subset=真子集
      中文版:首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。 
      For a table to be in the Second Normal Form, it must satisfy two conditions:
      The table should be in the First Normal Form.
      There should be no Partial Dependency.
      如果违反了这个Partial Dependency的要求,需要拆开(行话:normalization)才能保证2NF
    • 3NF: (没有non-prime attritube determines non-prime attribute)


      image.png
      image.png

      For a table to be in the third normal form,

    1. It should be in the Second Normal form.
    2. And it should not have Transitive Dependency.
      Advantage of removing Transitive Dependency
      The advantage of removing transitive dependency is,
      Amount of data duplication is reduced.
      Data integrity achieved.
      第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。

    首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。 考虑一个订单表【Order】(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主键是(OrderID)。

    其中 OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主键列都完全依赖于主键(OrderID),所以符合 2NF。不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。
    通过拆分【Order】为【Order】(OrderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF。

    第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。

    source:
    https://www.studytonight.com/dbms/second-normal-form.php
    https://www.studytonight.com/dbms/database-normalization.php
    https://blog.csdn.net/dream_angel_z/article/details/45175621

    • BCNF的定义是:
      如果对于关系模式R中存在的任意一个非平凡函数依赖X->A,都满足X是R的一个超键,那么关系模式R就属于BCNF。
      对上述定义,可以理解为:平凡函数依赖关系是指,如果属性集合X包含了属性集合A,那么就一定有X->A;超键是指能够唯一确定表中各行的属性集合,因此一个超键的最小化就是一个候选键;BCNF是说,如果一个属性集合X能“不平凡”地推导出另一个属性集合A,而且X还不能唯一区分表的各行,那么这个表中一定包含了一些冗余信息。

    BCNF与第三范式的不同之处在于:第三范式中不允许非主属性被另一个非主属性决定,但第三范式允许主属性被非主属性决定;而在BCNF中,任何属性(包括非主属性和主属性)都不能被非主属性所决定。


    image.png

    相关文章

      网友评论

          本文标题:1NF 2NF 3NF BCNF

          本文链接:https://www.haomeiwen.com/subject/yioflftx.html