[数据库]四种范式

前提知识


  • 什么是键码?
    如果一个属性或多个属性的集合{A,B,C,D….}满足下面的条件,称为关系R的键码。
    1、这些属性函数决定该关系的所有其它属性
    2、{A,B,C,D….}的任何真子集都不能函数决定R的其它属性,也就是说{A,B,C,D….}必须是最小的

  • 什么是主属性?
    键码所在的属性成为主属性。

  • 什么是非主属性?
    非键码所在的属性称为非主属性。

    例子:
    这里写图片描述
    比如上图中,SnoCname就是主属性,其他的为非主属性。{Sno,Cname}为键码。


关于函数依赖


部分函数依赖:设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
举个例子:学生基本信息表R中(学号,身份证号,姓名)当然学号属性取值是唯一的,在R关系中,(学号,身份证号)->(姓名),(学号)->(姓名),(身份证号)->(姓名);所以姓名部分函数依赖与(学号,身份证号);

完全函数依赖:设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。
例子:学生基本信息表R(学号,班级,姓名)假设不同的班级学号有相同的,班级内学号不能相同,在R关系中,(学号,班级)->(姓名),但是(学号)->(姓名)不成立,(班级)->(姓名)不成立,所以姓名完全函数依赖与(学号,班级);

传递函数依赖:设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。
例子:在关系R(学号 ,宿舍, 费用)中,(学号)->(宿舍),宿舍!=学号,(宿舍)->(费用),费用!=宿舍,所以符合传递函数的要求;

来自 https://blog.csdn.net/rl529014/article/details/48391465





四种范式


  • 第一范式

如果一个关系模式中所有属性都是不可分割的基本属性,则这个关系模式属于第一范式

  • 第二范式

如果一个关系模式属于第一范式,其中所有非主属性都完全函数依赖于键码,则属于第二范式

  • 第三范式

如果一个关系模式属于第一范式,其中所有非主属性都不传递依赖于键码,则属于第三范式

  • BC范式

如果一个关系模式属于第一范式,其中所有属性都不传递依赖于键码,则属于BC范式

一张图总结:

这里写图片描述