• 数据库三范式


    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:是否存在主键依赖传递

  • 相关阅读:
    OAuth2.0标准类库汇总
    RabbitMQ:Docker环境下搭建rabbitmq集群
    WCF&AppFabric :异常消息: 内存入口检查失败
    前端框架Vue、Angular、React
    串口驱动开发
    组合而不是继承,单一职责
    项目管理的一个月
    软件架构的一个设想以及谈一下过去两年开发软件的过失
    TCP中需要了解的东西
    C++编程新思维中的技巧
  • 原文地址:https://www.cnblogs.com/moongeek/p/7450074.html
Copyright © 2020-2023  润新知