• 数据库原理及应用-数据库设计中的五种范式


    2018-02-22 20:45:33

    要想设计一个结构合理的数据库,首先得明确需求,并且分析数据之间的关系,数据间的关系成为数据依赖。

    数据依赖分为两种:

    • 函数依赖(Function dependency,FD):一种最基本的数据依赖,一个或一组属性可以决定其他的属性;
    • 多值依赖(Multi-valued Dependency,MVD):一个或一组属性可以决定其他属性的多个不同值,在数据库设计的时候基本不用考虑;
    • 连接依赖(Join Dependency,JD):将一张表投影拆分,若将拆分后的表连接后能够完全得到原表,则称拆分表连接依赖,在数据库设计的时候基本不用考虑;

    范式介绍

    • 1NF:每个属性类型都得是原子的,不能表中套表。

    • 2NF:在1NF的基础上不存在部分函数依赖。

    如下例,主键是(S#,C#),然而表中的姓名,年龄,地址等信息可以由S确定,也就是存在了部分函数依赖,所以不满足二范式。

    如果关系不满足二范式,则会引起如下的问题:

    1、插入异常:例如新生报道,由于尚未选课,所以导致无法录入姓名,年龄,地址的信息,因为主键C不能为空;

    2、删除异常:例如删除所有选课信息,那么姓名等个人信息也得删除;

    3、更新异常:在更新的时候很难维护,例如一个学生选课50个,那他的住址,年龄等就要冗余50次;

    解决方法:one fact in one place,即一事一地,一张表管一件事。

    • 3NF:在2NF的基础上不存在属性对主键的传递依赖。

    如下例,SALARY -> SAL_LEVEL -> EMP,因此存在传递依赖,所以不满足三范式。

    关系不满足三范式会出现的问题:

    1、插入异常:例如该公司工资级别还未确定的时候,那么该级别和薪水的对照关系就没有确定;

    2、删除异常:例如拿三级工资的只有一个,如果将之删除,那么三级的工资对照关系也随之删除了;

    3、更新异常:在更新的时候很难维护,例如拿三级工资的有100人,那么三级工资拿的工资的对照关系就会重复100次,如果三级工资更改了,那么也需要修改100次。也就是说数据冗余量很大;

    解决方法:one fact in one place,即一事一地,一张表管一件事。

    • 4NF:在3NF的基础上消除数据之间可能存在的多值依赖(很少考虑)
    • 5NF:在4NF的基础上消除数据之间可能存在的连接依赖(很少考虑)
  • 相关阅读:
    Python Revisited Day 13 (正则表达式)
    Python Revisited Day 06 (面向对象程序设计)
    Python Revisited (变量)
    Python Revisited Day 05(模块)
    Python Revisited Day 04 (控制结构与函数)
    Python Revisited Day 03 (组合数据类型)
    Numpy
    Python Revisited Day 01
    Python3使用openpyxl读写Excel文件
    Python3操作YAML文件
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/8460239.html
Copyright © 2020-2023  润新知