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

    # 第一范式
    1 数据库表的每一列都不可再分,即不能有重复值。

    2属性不能重复
    3解决办法
    拆分多个表

    # 第二范式
    1首先要满足第一范式
    2非主键字段需要完全依赖主键
    3主要针对复合主键

    eg
    订单表
    订单编号    种类    数量    时间
    1           铅笔    2       0
    2           钢笔    3       1
    3           墨水    2       2
    用户表
    id    订单编号     username    zhuangtai
    1       1           a           y
    1       2           a           n
    2       3           c           y
    如果id和订单编号为复合主键
    状态完全依赖于主键
    但是用户名只依赖id
    因此不满足第二范式

    存在的问题
    1修改一个用户订单时需要修改多条记录
    2当一个用户没有下单时不能插入数据
    3删除用户的订单会将用户一起删除

    解决思路
    1关键在于用户名没有依赖复合主键
    2将用户名移除并与id新建一张表
    3其余属性合并
    eg
    id      username
    1       a
    2       c

    # 第三范式
    1必须在满足第二范式的情况下
    2其余字段之间不存在依赖性

    eg
    id      username        grade       discount
    1           a              a            0.9
    2           b              b            0.8
    3           c              a            0.9

    存在的问题
    可以看到虽然其余三个属性依赖主键id字段
    但是非主键字段grade discount之间存在依赖关系

    缺陷:
    1输入数据时会导致 如果出现没存在的grade那么discoun 也无处可知
    2删除某一个等级下的所有数据时对应的折扣也将被删除
    3修改某一数据时,对grade修改同时意味着对discount的修改


    解决思路:
    将这对依赖关系独立建表
    grade       discount
    a           0.9
    b           0.8

    # 范式的优缺点
    优点
    1降低了数据的冗余
    2提高了数据的增删改的可靠性

    缺点
    1增加了表的数量
    2降低了查询的效率

    # 反范式
    1直接在表中添加字段
    2会出现数据不一致的问题
    3需要定期更新定期检查


  • 相关阅读:
    Java闭包和回调
    Java通过字节分割字符串
    编译型语言和解释型语言的简单介绍
    对JavaScript事件处理程序/事件监听器的设定的简单介绍
    Linux netstat命令详解
    CentOS 7下iptables配置添加修改规则端口方法(转)
    设计模式
    设计模式
    Mysql8.0主从配置
    设计模式
  • 原文地址:https://www.cnblogs.com/sugar-k/p/11480346.html
Copyright © 2011-2022 走看看