码迷,mamicode.com
首页 > 数据库 > 详细

数据库理论——数据库3范式

时间:2018-01-06 22:04:54      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:百度   没有   元组   strong   get   body   学生   依赖   三范式   

一、概述

  1.什么是范式

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

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

  2.范式的要求

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

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

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

二、第一范式

  定义:

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

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

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

  技术分享图片

  正确设计如下:

  技术分享图片

三、第二范式

  定义:

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

  属性完全依赖于主键!

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

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

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

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

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

  技术分享图片

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

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

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

四、第三范式

  定义:

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

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

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

五、BC范式

  定义:

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

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

数据库理论——数据库3范式

标签:百度   没有   元组   strong   get   body   学生   依赖   三范式   

原文地址:https://www.cnblogs.com/jiangbei/p/8204735.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!