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

    数据库三范式

    2015-05-19

    1 三范式非正式描述
    2 三范式解释
    3 三范式示例

    1 三范式非正式描述


     返回

    • 1NF:字段不可分;
    • 2NF:有主键,非主键字段完全依赖主键, 所谓完全依赖是指不能存在仅依赖主关键字一部分的属性 (主要针对联合主键而言);
    • 3NF:非主键字段不能相互依赖;

    2 三范式解释


     返回

    • 1NF:原子性 字段不可再分,否则就不是关系数据库;
    • 2NF:唯一性 一个表只说明一个事物;
    • 3NF:每列都与主键有直接关系,不存在传递依赖;

    3 三范式示例


     返回

    3.1 第一范式

    表1  不符合第一范式的例子(关系数据库中create不出这样的表)

    字段1 字段2(字段2.1, 字段2.2) 字段3 ......

    存在的问题: 因为设计不出这样的表, 所以没有问题;

    3.2 第二范式

    表2 不符合第二范式的例子:

    学号 姓名 年龄 课程名称 成绩 学分

    因为学生有多门课程,所以把学号和课程名称作为表的联合主键。该表姓名、年龄仅依赖主关键字一部分的属性学号,成绩、学分仅依赖主关键字一部分的属性课程名称,不符合第二范式。

    这个表明显说明了两个事务:学生信息, 课程信息;

    存在问题:

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

    修正:

    表2.1 学生

    学号 姓名 年龄

    表2.2 课程

    课程名称 学分

    表2.3 选课关系

    学号 课程名称 成绩

    满足第2范式只消除了插入异常。

    3.3 第三范式

    表3 不符合第三范式的例子:

    学号 姓名 年龄 所在学院 学院联系电话

    关键字为单一关键字"学号";

    存在依赖传递: (学号) → (所在学院) → (学院地点, 学院电话)

    存在问题:

    • 数据冗余:有重复值;
    • 更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况
    • 删除异常:该界学生毕业了,会把学院信息也删了

    修正:

    表3.1 学生

    学号 姓名 年龄 所在学院

    表3.2 学院

    所在学院 学院联系电话
  • 相关阅读:
    电脑端与iPad 端如何共享ChemDraw结构
    用几何画板绘制带根号坐标点的方法
    几何画板使用方法
    如何在ChemDraw中缩短双键长度
    如何在ChemDraw中打出符号π
    怎么用几何画板制作图形平移和旋转
    怎么用几何画板制作三维波纹
    如何在ChemDraw中输入℃温度符号
    怎么用ChemDraw加反应条件
    MathType中输入不了汉字如何处理
  • 原文地址:https://www.cnblogs.com/Ming8006/p/4514815.html
Copyright © 2011-2022 走看看