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

      

    什么是范式?

    简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。

    什么是三大范式?

    第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。 

    第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依 赖于主键,而不能只依赖于主键的一部分。 

    第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖 于非主键列 B,非主键列 B 依赖于主键的情况。注:关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性

    如何理解三大范式?

    第一范式(1NF):

    第一范式(无重复的列)

    定义:数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。如果实体中的某个属性有多个值时,必须拆分为不同的属性

    通俗解释:一个字段只存储一项信息

    eg:班级:高三年1班,应改为2个字段,一个年级、一个班级,才满足第一范式

    不满足第一范式

    学号 姓名 班级
    0001 小红 高三年1班


    改成

    学号 姓名 年级 班级
    0001 小红 高三年 1班

    第二范式(2NF):

    第二范式(属性完全依赖于主键)

    定义:满足第一范式前提,当存在多个主键的时候,才会发生不符合第二范式的情况。比如有两个主键,不能存在这样的属性,它只依赖于其中一个主键,这就是不符合第二范式

    通俗解释:任意一个字段都只依赖表中的同一个字段

    eg:比如不符合第二范式        

    学生证 名称 学生证号 学生证办理时间 借书证名称 借书证号 借书证办理时间
               

    改成2张表如下

    学生证表

    学生证 学生证号 学生证办理时间
         

    借书证表

    借书证 借书证号 借书证把你拉时间
         

     示例2:

    第三范式(3NF):

    第三范式(属性不能传递依赖于主属性)

    定义:满足第二范式前提,如果某一属性依赖于其他非主键属性,而其他非主键属性又依赖于主键,那么这个属性就是间接依赖于主键,这被称作传递依赖于主属性。

    通俗理解:一张表最多只存2层同类型信息

    eg:爸爸资料表,不满足第三范式

    爸爸 儿子 女儿 女儿的小熊 女儿的海绵宝宝
             

     改成

    爸爸信息表:

    爸爸 儿子 女儿
         

    女儿信息表

    女儿 女儿的小熊 女儿的海绵宝宝
         

     示例2:

    结论

    三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

  • 相关阅读:
    【Spring】每个程序员都使用Spring(四)——Aop+自定义注解做日志拦截
    倪光南:保护科技人员知识产权是提升企业创新的关键(柳传志,杨元庆没有投入资金和技术,却占了大量股份,在全世界都非常少见)
    凡是能导到线上的都已经尝试过了,现在转化用户成本非常高,到了强者恒强的时代
    MIPS 指令集将在近期开源,RISC-V 阵营慌吗?
    QmlWinExtras
    用css解决Unigui在IE系列浏览器中字体变小的问题(设置UniServeModule的customcss属性)
    uni-app
    .net core consul grpc--系统服务RPC实现通信(一)
    系统间通信——RPC架构设计
    程序是由数据结构属于静态的部分和算法的调用为动态部分构成
  • 原文地址:https://www.cnblogs.com/ooo0/p/12230485.html
Copyright © 2011-2022 走看看