zoukankan      html  css  js  c++  java
  • 数据库设计三范式

     一般地,在进行数据库设计时,应遵循三大原则,也就是我们通常说的三大范式,使用三范式可以避免数据的冗余,而且在更新表操作时,只需要更新单张表就可以了。

    三范式介绍

    第一范式(The First Normal Form,1NF),符合原子性,字段(属性)是不可分割的。

    第二范式(The Second Normal Form,2NF),消除部份依赖。即:一张表存在组合主键时,其他非主键字段不能部分依赖。

    第三范式(The Third Normal Form,3NF),消除传递依赖。即:其他非主键字段必须依赖主键。

    第一范式

    要求对属性的原子性,也就是说要求数据库中的字段需要具备原子性,不能再被拆分

    eg:学生表中有字段:学生 ID、学生名、电话;而其中电话又可以分为:家庭电话和移动电话等。因此,此表不符合第一范式,如下图所示:

    不符合第一范式

     

    符合第一范式

     

    第二范式

    例如学生信息详情表有学生 ID、老师 ID、学生姓名、老师姓名这些字段。其中,学生 ID和老师 ID 为联合主键,但这个表中的"学生姓名"字段只依赖学生 ID,和老师 ID就没有任何关系了,因此这个表也不符合第二范式。我们可以拆分为学生表和老师表,其中学生表包含:学生 ID、老师 ID、学生姓名等字段;而老师表包含:老师 ID、老师姓名等字段。这样就消除了老师姓名多次重复出现的情况了,从而避免了冗余数据的产生。

    不符合第二范式

    符合第二范式

    第三范式

    想要满足第三范式必须先满足第二范式,第三范式要求所有的非主键字段必须直接依赖主键,且不存在传递依赖的情况。

    例如,有一个学生表中包含了:学生 ID、学生姓名、老师 ID、老师姓名等字段。这个表的所有字段(除去主键字段)都完全依赖唯一的主键字段(学生 ID),所以符合第二范式。但它存在一个问题,老师姓名依赖非主键字段老师 ID,而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合第三范式。

    我们可以把学生表分为两张表,一张是学生表包含了:学生 ID、学生姓名、老师ID等字段;另一张为老师表包含了:老师 ID、老师姓名等字段,这样就满足第三范式的要求了。

    不符合第三范式

     符合三范式

    希望本文章对您有帮助,您的转发、点赞是我的创作动力,十分感谢。更多好文推荐,请关注我的微信公众号--JustJavaIt
  • 相关阅读:
    networktool3
    networktool2
    networktool
    Intel Zepher 介绍
    使用IPMI发送事件1让BMC log 填满
    Knights Landing
    Intel历代处理器
    Intel Datacenter Group Public Roadmap
    django的url路由
    position用法
  • 原文地址:https://www.cnblogs.com/liaowenhui/p/12852360.html
Copyright © 2011-2022 走看看