SQLserver范式

mac2026-01-02  7

关系规范化

文章目录

关系规范化范式第一范式第二范式第三范式

范式

关系数据库中的关系要满足一定的要求,满足不同程度要求的为不同的范式。满足最低要求的为第一范式,简称1NF(First Normal Form) 在第一范式中进一步满足一些要求的为第二范式,简称2NF,依此类推,还有3NF、BCNF、4NF和5NF。

第一范式

第一范式定义:不包含重复组的关系(即不包含非原子项的属性)如图1-12

第二范式

第二范式:满足第一范式且关系模式中的每个非主属性都完全依赖于主键

对于S-L-C(Sno,Sdept,Sloc,Cno,Grade) –学号,系,公寓号,课程号,成绩

Sno,Cno –主键

Sno→Sdept –Sdept依赖于Sno

(Sno,Cno)→p Sdept –存在非主属性对主键的部分函数依赖关系

去掉部分函数依赖的分解过程如下:

1.对于组成主键的属性集合的每一个子集,用它作为主键构成一个关系模式 2.对每个关系模式,将依赖于此主键的属性放置到此关系模式中 3.去掉只由主键的子集构成的关系模式

S-L-C关系模式分解后的形式为:

S-L(Sno,Sdept,Sloc)和S-C(Sno,Cno,Grade)

S-L的主键是(Sno),并且有Sno→f Sdept , Sno→f Sloc,因此S-L已是2NF关系模式

S-C的主键是(Sno,Cno),并且有(Sno,Cno)→f Grade ,因此S-C也是2NF关系模式

下面思考分解到2NF之后,关系模式是否还会存在问题先考虑S-L 关系模式,在这个关系模式中,描述多少个学生就会重复描述每个系和其所在的公寓楼多少遍,(~见图二)因此还存在数据冗余,其次,当新成立一个系时,如果此系还没有招收学生,但已经分配公寓楼,则无法将此系的信息插入到S-L中,因为这时的学号为空,这是插入异常。 由此,第二范式的关系可能存在操作异常情况,因此需要对第二范式的关系模式进一步的分解。

第三范式

第三范式:满足第二范式且所有非主属性都不传递函数依赖于主键

S-L(Sno,Sdept,Sloc)

Sno→Sdep,Sdept→Sloc. 有Sno→传递Sloc

消除传递函数依赖的分解过程为:

1.对于不是候选键的每个决定因子,从表中删去依赖于它的所有属性 2.新建一个关系模式,新关系模式中包含原关系模式中所有依赖于该决定因子的属性 3.将决定因子作为新关系模式的主键

S-L分解后的关系模式为: S-D(Sno→f Sdept) Sno为主键 & S-L(Sdept,Sloc) Sdept为主键 对S-D有Sno→f Sdept 因此S-D是3NF 对S-L有Sdept→f Sloc. 因此S-L也是3NF

由于3NF关系模式中不存在非主属性对主键的部分函数依赖和传递函数依赖,因而消除了很大一部分数据冗余和更新异常,因此,在通常的数据库设计中,一般要求将关系模式分解到3NF即可。

最新回复(0)