数据库设计的三范式

  • 关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

  • 1NF:原子性,无重复的列,每一列都是不可分割的基本数据项,同一列中不能有多个值,每一列属性都是不可再分的属性值。
    不符合:
    在这里插入图片描述
    1NF是所有关系型数据库的最基本要求。
    如果只满足1NF,可能造成数据冗余过大。(插入异常、删除异常、修改异常)

  • 2NF:唯一性,属性完全函数依赖于主键。首先满足第一范式。一个表中的非主键字段、完全依赖于主键字段。消除部分依赖

    函数依赖:若在一张表中,在属性或属性组X的值确定的情况下,必定能确定属性Y的值,那么就可以说Y函数依赖于X(X相同是,Y必然相同)。
    Y完全函数依赖于X,表示Y不函数依赖于X’(X的一部分)。也就是说X的一部分不能决定Y,即不存在部分函数依赖(如果X的一部分就能唯一确定Y,则存在数据冗余)

    找到当前表中的主属性(码中的属性):除 K 之外的所有属性都完全函数依赖于 K。(如果码只有一个属性,则不可能存在部分函数依赖)
    看是否存在非主属性对码的部分函数依赖。
    如果存在,则将数据表进行拆分(模式分解)。
    消除这些部分函数依赖,只有一个办法,就是将大数据表拆分成两个或者更多个更小的数据表,在拆分的过程中,要达到更高一级范式的要求,这个过程叫做”模式分解“。

    满足2NF可以改善数据冗余和修改异常,但还是可能存在删除异常、插入异常等。

  • 3NF:独立性,消除传递依赖,属性不依赖于其它非主属性。首先满足第二范式。要求一个数据库表中不包含在其他表中已包含的非主键字段

    例如:学生表:学生(学号,姓名,系名,系主任),主属性为学号,非主属性为姓名、系名和系主任。因为 学号 → 系名,同时 系名 → 系主任,所以存在非主属性系主任对于码学号的传递函数依赖。

    符合3NF要求的数据库设计,基本上解决了数据冗余过大,插入异常,修改异常,删除异常的问题。当然,在实际中,往往为了性能上或者应对扩展的需要,经常做到2NF或者1NF。

  • BCNF:在某些特殊情况下,即使关系模式符合 3NF 的要求,仍然存在着插入异常,修改异常与删除异常的问题。即满足3NF时,还是有可能存在主属性对于码的部分函数依赖与传递函数依赖。BCNF就是在3NF的基础上消除主属性对于码的部分和传递函数依赖。

    如果R∈3NF,且只有一个候选码,则R∈BCNF

【参考文档】
如何理解关系型数据库的常见设计范式? - 刘慰的回答 - 知乎

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值