关系数据库理论-范式

范式

  • 范式是符合某一种级别的关系模式的集合。 
  • 范式的种类:    第一范式(1NF) ,第二范式(2NF) ,第三范式(3NF) ,BC范式(BCNF) ,第四范式(4NF) ,第五范式(5NF) 
  • 关系数据库理论-范式_第1张图片

 

第一范式

  • 作为二维表,关系要符合一个最基本的条件:每个分量必须是不可分开的数据项。满足了这个条件的关系 模式就属于第一范式(1NF) 。即不能表中包含表。
  • S-L-C(Sno,Sdept,Sloc,Cno,Grade) 例如这组关系,Sno表示学号,Sdept表示系名,Sloc为学生的住处,Cno表示选修课程号,Grade表示成绩。这些属性都是不可分的数据项。

第二范式

  • 候选码:若关系中的某一属性组的值能唯一标识一个元组,而其子集不能,则称该属性组为候选码。
  • 若关系模式R∈1NF,并且每一个非主属性 都完全函数依赖于任何一个候选码,则R∈2NF 。

[例]  S-L-C(Sno,Sdept,Sloc,Cno,Grade), Sloc为学生的住处,并且每个系的学生住在同一个 地方。

S-L-C的码为(Sno,Cno)。  

函数依赖有

(Sno,Cno)F→Grade

Sno→Sdept, (Sno,Cno)P→Sdept

Sno→Sloc, (Sno,Cno)P→Sloc

Sdept→Sloc 

  • 非主属性Sdept、Sloc并不完全依赖于码 
  • 关系模式S-L-C不属于2NF 

一个关系模式不属于2NF会产生一些问题,例如如果插入一个新学生,但该生未选课,即该生无Cno, 由于插入元组时,必须给定码值,因此插入失败。

出现这种问题的原因是例子中有两类非主属性:

  •  一类如Grade,它对码完全函数依赖
  • 另一类如Sdept、Sloc,它们对码不是完全函数依赖 

第三范式

  • 用投影分解把关系模式S-L-C分解成两个关系模式 
    • SC(Sno,Cno,Grade) 
    • S-L(Sno,Sdept,Sloc) 

关系数据库理论-范式_第2张图片

关系数据库理论-范式_第3张图片

                                       

  •  SC的码为(Sno,Cno),SL的码为Sno,这样使得非主属 性对码都是完全函数依赖了 。符合第二范式的要求。
  • 即使是这样,仍然会产生插入问题,例如学校新增了一个系和住处,在关系模式S-L(Sno,Sdept,Sloc) 中由于没有学号导致无法插入新的系和住处。
  • 产生这个问题的原因是因为在关系模式中S-L(Sno,Sdept,Sloc)存在着传递依赖,S-L中Sno →Sdept( Sdept ↛ Sno), Sdept→Sloc,可得Sno  →  Sloc。

为了解决第二范式中的问题就有了第三范式,3NF消除了传递依赖。

  • 定义: 设关系模式R∈1NF,若R中不存在 这样的码X、属性组Y及非主属性Z(Z ⊇ Y), 使 得X→Y,Y→Z成立,Y ↛ X不成立,则称 R ∈ 3NF。
  • 解决的办法是将S-L分解成
    • S-D(Sno,Sdept)∈ 3NF
    • D-L(Sdept,Sloc)∈ 3NF 
  • 通过这个办法就可以单独插入系和住处的数据。

BCNF范式

  • 所有非主属性都完全函数依赖于每个候选码 
  • 所有主属性都完全函数依赖于每个不包含它的候选码 
  • 没有任何属性完全函数依赖于非码的任何一组属性 

            [例] 关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。每一教师只教一门课。每门课有若干教师,某一学生选定某门课,就对应一个固定的教师。 

  • 由语义可得到函数依赖:(S,J)→T;(S,T)→J;T→J ,其中码是(S,J)或者(S,T)​​​​​​​
    • 一个学生选了一门课就对应一个老师
    • 一个学生加上一个老师就对应一门课
    • 一个老师可以决定一门课
    • 因为没有任何非主属性对码传递依赖或部分依赖,STJ ∈ 3NF
    • T是决定因素,而T不包含码,所以STJ 不属于 BCNF关系
    • 对于不是BCNF的关系模式,仍然存在不合适的地方
    • 非BCNF的关系模式也可以通过分解成为BCNF。 例如STJ可分解为ST(S,T)与TJ(T,J),它们都是 BCNF
  • 总结
    • 如果一个关系数据库中的所有关系模式都属于 BCNF,那么在函数依赖范畴内,它已实现了模式 的彻底分解,达到了最高的规范化程度,消除了插入异常和删除异常。

 


 

 

你可能感兴趣的:(sql)