zoukankan      html  css  js  c++  java
  • 数据库理论——数据库3范式

    一、概述

      1.什么是范式

      设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。

      以上来自百度百科;所以,简单来说,范式就是规范要求

      2.范式的要求

      目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。

      来自百度百科;所以,我们常用的是第三范式。他会自动要求满足低的范式。

      以下,将会逐个对范式进行介绍,主要参考有:百度百科知乎

    二、第一范式

      定义:

      所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。

      通俗的SQL语法来说,就是字段不可再分割!

      简单来说,就是属性不可再分,也就是以下设计是错误的:

      

      正确设计如下:

      

    三、第二范式

      定义:

      在1NF的基础上,非属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)

      属性完全依赖于主键!

      // 以上概念解释参考自上文知乎回答

        :关系中的某个属性或者某几个属性的组合,用于区分每个元组(也就是每条记录);它是候选码的简称,也就是说,码一旦确定,其他属性也就随之确定了!

        函数依赖:姓名函数依赖于学号,写作 学号 → 姓名;也就是学号一旦确定,姓名就确定了(但反过来不成立),所以这里是姓名函数依赖于学号!

         其他概念不再一一赘述,参考上文知乎回答链接

      所以,以下设计就是不符合第二范式的:

      

      用通俗的语言来说,就是存在系主任不依赖与主键(学号,姓名),

      至于所引发的更新异常、删除异常,参考链接处详细解释。这里列出一个删除异常

    假如将某个系中所有学生相关的记录都删除,那么所有系与系主任的数据也就随之消失了(一个系所有学生都没有了,并不表示这个系就没有了)。
                                                              ——删除异常

    四、第三范式

      定义:

      在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

      属性不依赖于其他非主属性!

      对于第二范式中的例子,由于存在学号->系名,系名->系主任,存在非主属性对于主属性的传递依赖

    五、BC范式

      定义:

      在3NF基础上,任何非主属性不能对主键子集依赖(在3NF基础上消除对主码子集的依赖)

      关于示例,可以参考知乎回答链接

  • 相关阅读:
    飞机游戏
    nodejs制作爬虫程序
    关于解析字符串
    引用nodejs的url模块实现url路由功能
    appium定位学习
    appium移动端自动化测试的一些感想
    appium的工作原理
    appium desktop 定位弹出框时报错
    APPium连接真机输入框中输入的内容与代码中不一致
    appium 链接真机后,运行代码,但是APP并没有启动
  • 原文地址:https://www.cnblogs.com/jiangbei/p/8204735.html
Copyright © 2011-2022 走看看