• 数据库设计三大范式


    数据库设计三大范式

    1. 第一范式

    确保每列的原子性。

    如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式。

    例如:

    顾客表(姓名、编号、地址、……) ,其中"地址"列还可以细分为国家、省、市、区等
    

    2. 第二范式

    在第一范式的基础上更进一层,目标是确保表中的每列都和主键相关。

    如果一个关系满足第一范式,并且除了主键以外的其它列,都依赖于该主键,则满足第二范式。

    例如:

    订单表(订单编号、产品编号、定购日期、价格、……),
    	
    "订单编号"为主键,"产品编号"和主键列没有直接的关系,即"产品编号"列不依赖于主键列,应删除该列。
    

    3. 第三范式

    在第二范式的基础上更进一层,目标是确保每列都和主键列直接相关,而不是间接相关。

    如果一个关系满足第二范式,并且除了主键以外的其它列都不依赖于主键列,则满足第三范式.

    为了理解第三范式,需要根据Armstrong 公理之一定义传递依赖。

    假设A、B和C是关系R的三个属性,如果A→B且B→C,则从这些函数依赖中,可以得出A→C。

    如上所述,依赖A→C是传递依赖。

    例如:

    订单表(订单编号,定购日期,顾客编号,顾客姓名,……)
    
    初看该表没有问题,满足第二范式,每列都和主键列"订单编号"相关
    
    再细看你会发现"顾客姓名"和"顾客编号"相关,"顾客编号"和"订单编号"又相关,最后经过传递依赖,"顾客姓名"也和"订单编号"相关。
    
    为了满足第三范式,应去掉"顾客姓名"列,放入客户表中。
    

    总结

    简而言之:

    第一范式就是原子性,字段不可再分割;

    第二范式就是完全依赖,没有部分依赖;

    第三范式就是没有传递依赖

  • 相关阅读:
    在Ubuntu中通过update-alternatives切换软件版本
    SCons: 替代 make 和 makefile 及 javac 的极好用的c、c++、java 构建工具
    mongodb 的使用
    利用grub从ubuntu找回windows启动项
    How to Repair GRUB2 When Ubuntu Won’t Boot
    Redis vs Mongo vs mysql
    java script 的工具
    python 的弹框
    how to use greendao in android studio
    python yield的终极解释
  • 原文地址:https://www.cnblogs.com/liushen/p/Three_Normal_Fromate_Of_Database.html
Copyright © 2020-2023  润新知