zoukankan      html  css  js  c++  java
  • 2.2 范式和反范式

    2.2.1 第一范式

    原子性:要求属性具有原子性,不可再分解。

    如学生(学号,姓名,性别,出生年月日),如果认为最后一列还可以再分成(出生年,出生月,出生日),它就不是一范式了,否则就是

    2.2.2 第二范式

    惟一性:要求记录有惟一标识,即实体的惟一性,即不存在部分依赖

    表:学号、课程号、姓名、学分; 
    这个表明显说明了两个事务:学生信息, 课程信息。由于非主键字段必须依赖主键,这里学分依赖课程号,姓名依赖与学号,所以不符合二范式。

    可能会存在问题:

    • 数据冗余:,每条记录都含有相同信息;
    • 删除异常:删除所有学生成绩,就把课程信息全删除了;
    • 插入异常:学生未选课,无法记录进数据库;
    • 更新异常:调整课程学分,所有行都调整。

    正确做法: 

      学生:Student(学号, 姓名); 
      课程:Course(课程号, 学分); 
      选课关系:StudentCourse(学号, 课程号, 成绩)。

    2.2.3 第三范式

    冗余性:要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖。
    表: 学号, 姓名, 年龄, 学院名称, 学院电话 
    因为存在依赖传递: (学号) → (学生)→(所在学院) → (学院电话) 。

    可能会存在问题:

    • 数据冗余:有重复值;
    • 更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况 。

    正确做法:

      学生:(学号, 姓名, 年龄, 所在学院);

      学院:(学院, 电话)。

    2.3.4 反范式化

    没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余,达到以空间换时间的目的。

    2.3.5 范式化设计和反范式化设计的优缺点

    范式化

    优点: 
    1· 可以尽量的减少数据冗余 
    2·数据表更新快体积小 
    3·范式化的更新操作比反范式化更快 
    4·范式化的表通常比反范式化更小


    缺点: 
    1·对于查询需要对多个表进行关联,导致性能降低 
    2·更难进行索引优化

    反范式化

    优点: 
    1·可以减少表的关联 
    2·可以更好地进行索引优化

     

    缺点 
    1·存在数据冗余及数据维护异常 
    2·对数据的修改需要更多成本

     

  • 相关阅读:
    Echarts markPoint 动态数据添加,选择性查询
    echarts timeline点击以后 蓝色的checkpoint位置不跟当前点击的节点重合
    Echarts 动态添加到map显示
    tomcat 下不在tomcat发布项目,引用外部链接
    SQL Server 2008安装
    eclipce 安装 svn插件(百度知道)
    迅为IMX6ULL开发板Linux蜂鸣器实验
    4412开发板-Android4.4典型功能相关源码修改及定制
    IMX6ULL开发平台Linux-LED实验
    迅为iTOP4418开发板运行Android7.1/Qt5.7/Ubuntu12.04系统源码开源
  • 原文地址:https://www.cnblogs.com/xlzfdddd/p/10125135.html
Copyright © 2011-2022 走看看