• 数据库范式(知乎)


    http://www.zhihu.com/question/24696366

    数据库泛型就是数据库应该遵循的规则,也称为范式

    1NF:所有的域都是原子性的,即表的每一列都是不可分割的原子数据项,不能是集合、数组、记录等非原子数据项。即实体中的某个属性有多个子属性时,必须拆分为不同的属性。第一范式是对关系型数据库的最低要求

      

    2NF:在1NF的基础上,非码属性必须完全依赖于码(码:关系中的某个属性或某几个属性的组合,用于区分每个元组,元组可以理解为表中每条记录)

      1NF存在的问题:

      1)数据冗余:表中学号、姓名、系名、系主任数据冗余严重

      2)插入异常:无法插入一个没有学生的新系(主属性不能为空,码包含的属性为主属性)

      3)删除异常:删除一个系的所有学生,将导致系和系名被删除

      4)修改异常:假设李小明转系到法律系,需要修改李小明的所有三条记录

      2NF在1NF的基础上,要求非码属性必须完全依赖于码,即非码属性不能部分依赖于码

      为了消除部分函数依赖,必须将大数据表拆分成两个或更多的小数据表:

      

      形成两张表:

      

    3NF:在2NF的基础上,消除了非主属性对于码的传递函数依赖

      2NF存在的问题:

      1)插入异常:无法插入一个没有学生的新系

      2)删除异常:删除所有学生将导致系消失

      在2NF中,可能存在非码属性传递函数依赖于码,如学号--系名--系主任

      为了消除传递函数依赖,需要继续拆分表:

      

      形成三张表:

      

      符合3NF要求的数据库设计,基本上解决了数据冗余过大、插入异常、删除异常、修改异常等问题

    BCNF范式:

      假设:

      1. 某公司有若干个仓库

      2. 每个仓库只能有一名管理员,一名管理员只能在一个仓库中工作

      3. 一个仓库中可以存放多种物品,一种物品也可以存放在不同的仓库中。每种物品在每个仓库中都有对应的数量

      则关系模式 仓库(仓库名,管理员,物品名,数量) 属于3NF范式:

      码:(管理员,物品名),(仓库名,物品名)

      主属性:仓库名、管理员、物品名

      非主属性:数量

      非主属性完全依赖于码、同时不存在非主属性对于码的传递函数依赖,所以属于3NF范式

      

      这张表存在的问题:

      1)无法新增未指派管理员、未存放物品的仓库

      2)清空仓库会删除仓库和管理员信息

      3)仓库更换管理员,将修改该仓库的每一条记录

      造成3NF范式存在这些问题的主要原因是:存在主属性对于码的部分函数依赖或传递函数依赖:主属性仓库名 对于 码(管理员、物品)存在部分函数依赖

      BCNF在3NF的基础上消除主属性对于码的部分和传递函数依赖

      因此需要将上表拆分成两个表:

      仓库(仓库名,管理员)

      库存(仓库名,物品名,数量)

  • 相关阅读:
    2018CCPC网络赛A(优先队列,思维)
    2017BAPC初赛A(思维,无序图,向量)
    2018杭电多校第三场1007(凸包,极角排序)
    2018杭电多校第二场1003(DFS,欧拉回路)
    2017乌鲁木齐区域赛K(容斥原理【求指定区间内与n互素的数的个数】)
    删除特定字符
    Error: An App ID with identifier "*****" is not avaliable. Please enter a different string.
    The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.问题解决
    生命周期图
    Mac 如何恢复出厂设置
  • 原文地址:https://www.cnblogs.com/buptlyn/p/4477147.html
Copyright © 2020-2023  润新知