在数据库关于范式的理解一直是一个难点,最近在深入学习SQL Server ,牵涉到数据库的设计,在这里有必要将范式这个问题弄明白!
在给出范式的简易理解之前,先得明确几个概念:
超码:能唯一标识元组的属性集称为关系模式的超码!
在姓名唯一的情况下,
比如关系模式 学生(学号,姓名,性别,民族,籍贯,联系方式)中属性集(学号,姓名,联系方式,性别)就是一个超码;
候选码:如果一个属性集能唯一标识元组,且又不含有多余的属性集,那么这个属性集称为关系模式的候选码;
比如在上述关系模式中,属性集(学号,姓名)和(学号)能称为一个候选码;
主码:在一个关系模式中,用户正在使用的候选码称为关系模式的主码;
外码:如果关系R中某个属性集是其他关系模式的主码,那么该属性集是R的外码。
第一范式:当且仅当一个关系变量的所有的合法的值中,每一个属性只含有
一个值时,该关系变量属于INF;
第二范式:(假定只有一个候选码,且该候选码为主码)当且仅当一个关系
变量属于INF,且该关系变量的每一个非码属性都完全函数依赖
于主码时,该关系变量属于2NF;
第三范式:(假定只有一个候选码,且该候选码是主码)当且仅当一个关系
变量的所有非码属性都不传递于主码时,该关系变量属于3NF;
另解:
假设R是关系变量,X是R的属性集的子集,A是R的任意一个属
性,当且仅当每一个函数依赖X—>A至少满足下列条件的一个时
时,该关系变量属于3NF:
1)X包含A;
2)X是个超码;
3)A属于R的某个候选码;
第四范式(BCNF):将上述另解中将3)去掉就是BCNF的精确定义