sql server中各类范式的理解

sql server中各类范式的理解

常见的范式有1NF 2NF 3NF 以及BCNF 除此之外还有更高级别的范式

范式被理解为某一种级别的关系模式的集合 即R为第几范式 可写成R∈xNF

对于R∈1NF 通俗的来说 就是不允许表中有表 即R中的属性不可再分

 

对于 R∈2NF 在满足1NF的情况下 还需要R中的每一个非主属性完全依赖于码 

码(可以是单个属性或者是属性的集合) 如学生成绩表SC(Sno Cno Grade)

这里的码就是(Sno,Cno) primary key  因为一门课程的成绩需要学号和课程号一起来决定 这样才能唯一标识

(Sno,Cno)→Grade

这里的非主属性Grade就完全依赖于码

并不能由学号或课程号来得到某名学生课程的成绩



对于R∈3NF  则在2NF的基础上 还需要要求每一个非主属性不传递依赖于码

也就是要消除传递依赖  

如学生成绩表SC(Sno Cno Grade) 它就没有传递依赖 故它也是3NF 属性3NF的必定属于2NF 

若对于R,有Sno →Sdept(院系号)而Sdept不可以推导出学号 Sdept →Sloc 根据传递性

有Sno →Sloc 此时非主属性Sloc就传递依赖于码Sno 那么R就不属于3NF了

对于R∈BCNF(Boyce Codd Normal Form) 它是由Boyce和Codd提出的 比3NF又进了一步 通常认为BCNF是修正的第三范式 也称为扩充的第三范式

属于BCNF的必定属于3NF

满足BCNF范式的条件:

①所有非主属性对每一个码都是完全函数依赖

②所有主属性对每一不包含它的码也是完全函数依赖

③没有任何属性完全函数依赖于非码(非主属性)的任何一组属性


如课程表C(Cno,Cname)它只有一个码Cno 这里没有任何属性对Cno的部分依赖和传递依赖 故C∈3NF

且Cno是唯一的决定因素 故C∈BCNF

同样学生表S(Sno,Sname,Ssex,Sdept,Sage)也是属于BCNF


 


你可能感兴趣的:(SQL,Server)