zoukankan      html  css  js  c++  java
  • 数据库三范式

    1、前言

      数据库关系模式可分为第一范式(1NF),第二范式(2NF),第三范式(3NF)和Boyce-Codd范式(BCNF)。这几个规范要求越来越严格,他们之间的关系为 1NF ⊂ 2NF ⊂ 3NF ⊂ BCNF,即,如果满足第二范式一定满足第一范式,满足第三范式一定满足第二范式,以此类推。

    2、第一范式

    2.1 定义

      如果一关系模式r(R)的每个属性对应的域值是不可分的,则称r(R)属于第一范式,记为r(R)⊂1NF。

    2.2 案例

      如下图所示的关系模式是一个非规范化的关系模式,因为address的值域是可分的。

    name sex address
    province city street

      将上述关系模式规范化如下图,才是 1NF 关系模式:

    name sex province city street

     

    3、第二范式

    3.1 定义

      首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。

      第二范式满足两部分内容:一是表必须有一个主键;二是非主键属性必须完全依赖于主键,而不能只依赖于部分主键。

    3.2 案例

      如表主键为(OrderId,ProductId),Price(价格)和DisCount(折扣)项完全依赖于主键(OrderId,ProductId),而ProductName(产品名字)、Producter(生产商)仅仅依赖于ProductId,即部分主键,因此不符合第二范式,这样会导致数据冗余。可以拆分成如下两个表

    4、第三范式

    4.1 定义

      首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。

    4.2 案例

      如图,主键为 OrderId,其余所有属性都完全依赖于这个主键,但是ProductName(产品名字)、Producter(生产商)属性直接依赖于ProductId,ProductId依赖于主键,这就是 通过传递才依赖主键的,不符合3NF。拆分后,满足。

     

    5、第二范式和第三范式

     2NF 和 3NF很容易混淆,满足3NF一定满足2NF,总结下就是:

    • 2NF:是否存在部分依赖主键
    • 3NF:是否存在主键依赖传递

  • 相关阅读:
    Leetcode 92. Reverse Linked List II
    Leetcode 206. Reverse Linked List
    Leetcode 763. Partition Labels
    Leetcode 746. Min Cost Climbing Stairs
    Leetcode 759. Employee Free Time
    Leetcode 763. Partition Labels
    搭建数据仓库第09篇:物理建模
    Python进阶篇:Socket多线程
    Python进阶篇:文件系统的操作
    搭建数据仓库第08篇:逻辑建模–5–维度建模核心之一致性维度2
  • 原文地址:https://www.cnblogs.com/moongeek/p/7450074.html
Copyright © 2011-2022 走看看