美文网首页
MySQL三范式&逆范式

MySQL三范式&逆范式

作者: 老衲灬 | 来源:发表于2018-09-19 20:43 被阅读4次

    一、三范式

    概念:为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则(注:在关系型数据库中这种规则就称为范式)
    1、确保每列/字段保持原子性(1NF)
    概念:指每个字段不可以再拆分
    案例:地区表

    id(编号)   address(地址)     #可以拆分:省  市  区
    1           北京北京朝阳区
    2           上海上海浦东新区
    3           江苏泰州海陵区
    

    2、有主键,非主键字段依赖主键(2NF)
    概念:指每个表有一个主键,一个表只描述一件事
    案例:用户表

    id(编号)  username(用户名)  password(密码)  address(收货地址)
    
    #说明:应该新增收货地址表
    

    3、消除传递依赖,非主键字段不能相互依赖(3NF)
    概念:一个表不能包含其他表的非主键字段(一个表只能包含其他包的主键字段)
    案例:

    #文章表
    文章编号      文章标题       文章内容       用户ID       #用户姓名(不该有) 
    文章表主键    文章表         文章表         用户表主键    #用户表非主键
    
    #用户表
    用户ID    用户姓名   用户年龄 ...
    

    二、逆范式

    概念:符合范式设计是为了减少冗余提高读写效率,但有时候我们需要反其道而为之,利用空间来换时间(数据冗余策略),该设计被称之为“逆范式”
    案例:

    #文章表
    编号     标题       内容      评论总数... 
    #评论表
    编号     所属用户   所属文章   评论内容 ....
    

    正常流: select count(*) from 评论表 where id=当前文章的编号
    逆范式: 给文章表加一个“评论总数字段”后期评论时候给该字段+1
    设计表推荐如下字段:编号、创建日期、更新日期、是否删除

    相关文章

      网友评论

          本文标题:MySQL三范式&逆范式

          本文链接:https://www.haomeiwen.com/subject/qtrwnftx.html