• MySQL——三范式


    目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

    一般说来,数据库只需满足第三范式(3NF)就行了。

    根据业务的需求来确定是否要遵循范式制定表结构。

    第一范式

    要求数据达到原子性 是数据不可再分。

    比如详细地址 是可以再分为 省市县区......

    第二范式

    在第一范式的基础上更进一层,目标是确保表中的每列都和主键相关(一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的部分)

        如果一个关系满足第一范式,并且除了主键以外的其它列,都依赖于该主键,则满足第二范式.
        例如:订单表(订单编号、产品编号、定购日期、价格、……),"订单编号"为主键,"产品编号"和主键列没有直接的关系,即"产品编号"列不依赖于主键列,应删除该列。

    第三范式

    在第二范式的基础上更进一层,目标是确保每列都和主键列直接相关,而不是间接相关(另外非主键列必须直接依赖于主键,不能存在传递依赖).
    如果一个关系满足第二范式,并且除了主键以外的其它列都不依赖于主键列,则满足第三范式.
    为了理解第三范式,需要根据Armstrong公里之一定义传递依赖。假设A、B和C是关系R的三个属性,如果A-〉B且B-〉C,则从这些函数依赖中,可以得出A-〉C,如上所述,
    依赖A-〉C是传递依赖。
    例如:订单表(订单编号,定购日期,顾客编号,顾客姓名,……),初看该表没有问题,满足第二范式,每列都和主键列"订单编号"相关,再细看你会发现"顾客姓名"和"顾客
    编号"相关,"顾客编号"和"订单编号"又相关,最后经过传递依赖,"顾客姓名"也和"订单编号"相关。为了满足第三范式,应去掉"顾客姓名"列,放入客户表中。

    注重细节——关注底层——注重细节——关注底层——注重细节——关注底层——注重细节——关注底层——注重细节——关注底层
  • 相关阅读:
    对 HTTP 304 的理解(转-并增加自己的测试)
    山寨云主机充斥市场 教您辨别真假云主机
    JavaScript判断字符串是否含有中文(实用)
    ThinkPHP CURD返回结果参考
    Linux下修改网卡的mac地址
    Asterisk重要App
    Validation(3)--全局参数异常校验捕获及返回XML解决
    Validation(2)
    Validation(1)
    Mybatis分页中遇到的坑2
  • 原文地址:https://www.cnblogs.com/PJG20/p/14724284.html
Copyright © 2020-2023  润新知