美文网首页胖达君的超级工具
数据库设计三范式与反范式

数据库设计三范式与反范式

作者: 我问你瓜保熟吗 | 来源:发表于2019-08-21 19:55 被阅读0次

    MySql设计与优化系列笔记:
    一、数据库设计三范式与反范式
    二、MySql表设计与优化

    第一范式:

    1、数据库的所有字段都是单一属性,不能再被拆分
    2、单一属性由基本的数据类型构成
    3、数据库的表都是二维的(行和列)

    错误示例:字段包含姓名、年龄、身高、出生年月日等多个属性,可以继续拆分

    第一范式错误样表

    正确示例
    第二范式的问题:字段出现大量重复数据;存在新增异常、更新异常、删除异常;
    当新增课程信息,但没有学生信息时,会出现部分字段空白,称为插入异常。
    当高芳芳同学转学离开后,法律系课程信息也会被删除,这称之为删除异常
    当李小明同学转系到法律系,除了系名要更改,系主任等字段也要同时跟着更改,这成为更新异常

    第一范式正确样表

    第二范式

    目的:通过拆表解决第一范式中数据冗余的问题。单并没有解决增删改异常的问题
    1、要符合第一范式
    2、必须要有一个主键(一列或多列)
    3、其它字段可由主键确定

    第二范式样表,像学生信息和课程信息进行拆分,由主键进行关联
    当删除高芳芳时,法律系也会被删除,产生删除异常。如果需要避免,则需要引入第三范式

    第二范式样表

    第三范式

    1、要求符合第二范式
    2、字段要直接依赖于主键,不允许简介依赖(第二范式样表中:系主任与学号无关,与系名挂钩)
    3、

    第三范式,分析数据关系拆分实体,产生主表与从表,解决了存在的增删改异常的问题,但是产生了大量的主从表

    第三范式样表

    反范式设计

    • 收货地址:省市县小区,范式设计需要将收货地址设置为4张表,造成sql压力
    范式设计 取出完整地址信息 反范式设计

    只需要 select * from .. 即可

    • 反范式设计优缺点

    通过字段冗余,变成单表查询,降低sql复杂度
    因存在字段冗余,当更新操作时,需要进行额外的从表更新操作,需要多次更新操作
    不合理的凡范式设计会让表变得臃肿

    • 整理自老齐的it加油站以及其它互联网资料

    相关文章

      网友评论

        本文标题:数据库设计三范式与反范式

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