数据库范式
宋标 Lv5

函数依赖

一个属性集合X能够决定另一属性集合Y,称之为Y函数依赖于X,X决定Y(属性集合:单属性或属性组)。
X决定Y,但是X的真子集(不包含X本身的子集)不能够决定Y,称之为完全函数依赖
X决定Y,但是X的真子集存在至少一个能够决定Y,称之为部分函数依赖
X决定Y,Y不决定X,Y决定Z,则称之为Z传递依赖于X
例如,学生表(学号sno,身份证scard,姓名sname)
sname完全函数依赖于sno,学号能够决定姓名
sname完全函数依赖于scard, 身份证能够决定姓名
sname部分函数依赖于(sno,scard), 学号和身份证都能够决定姓名,但是存在一个子集(学号或身份证)能够决定姓名。

主属性,属性,主码,候选码

先说候选码,候选码就是可以区别一个元组(即表中的一行数据)的属性或属性的集合,比如学生表student(id,name,age,sex,deptno),其中的id是可以唯一标识一个元组的,所以id是可以作为候选码的,既然id都可以做候选码了,那么id和name这两个属性的组合可不可以唯一区别一个元组呢?显然是可以的,此时的id可以成为码,id和name的组合也可以成为码,但是id和name的组合不能称之为候选码,因为即使去掉name属性,剩下的id属性也完全可以唯一标识一个元组,就是说,候选码中的所有属性都是必须的,缺少了任何一个属性,就不能唯一标识一个元组了,给候选码下一个精确的定义就是:可以唯一标识一个元组的最少的属性集合。而码是没有最少属性这个要求的。另外,一个表的候选码可能有多个,从这些个候选码中选择一个做为主码,至于选择哪一个候选码,这个是无所谓的,只要是从候选码中选的就行。至于主属性,刚才提到了,一个表可以有多个候选码,那么对于某个属性来说,如果这个属性存在于所有的候选码中,它就称之为主属性。非主属性:不包含在任何候选码中的属性称为非主属性。

1NF

属性值不能再分割,即每一列中的值都是不可再分割的,例如,学生表(id,name)中的name列存在”小王、小黄”这么一个属性值,将不满足一范式。

2NF

满足1NF且每一个非主属性都完全依赖于任一候选码。
简单的情况下,满足1NF,仅存在一个候选码且是单属性(比如id),那么一定满足2NF

3NF

满足2NF,且不存在非主属性传递依赖于候选码。

BCNF

满足3NF, 且每一个主属性对于不包含它的候选码是完全函数依赖,没有任何属性完全函数依赖于非候选码的任何一组属性

 评论