140 likes | 476 Views
5.2.3 范式. 范式:符合某种级别 ( 条件、要求 ) 的关系模式 范式种类 1NF, 2NF, 3NF, BCNF, 4NF,5NF 按级别 ( 条件、要求 ) 由低到高: 1NF 2NF 3NF BCNF 4NF 5NF 通常称某一关系模式 R 为第几范式,记作 R x NF. 1NF(First Normal Form). 定义:关系 R 中每个分量都是不可分割的数据项,则 R 1NF 说明: 1NF 是关系模式的基本要求 举例:
E N D
5.2.3 范式 • 范式:符合某种级别(条件、要求)的关系模式 • 范式种类 • 1NF, 2NF, 3NF, BCNF, 4NF,5NF • 按级别(条件、要求)由低到高: 1NF 2NF 3NF BCNF 4NF 5NF • 通常称某一关系模式R为第几范式,记作R xNF
1NF(First Normal Form) • 定义:关系R中每个分量都是不可分割的数据项,则R 1NF • 说明:1NF是关系模式的基本要求 • 举例: 关系模式S-L-C(学号SNO, 系SDEPT, 住处SLOC, 课程CNO, 成绩G)是1NF
SDEPT SNO G CNO SLOC 5.2.4 2NF • 定义:若R 1NF, 且每个非主属性完全依赖于码,则R 2NF • 说明:不存在非主属性部分依赖于码的关系为2NF • 举例:关系模式 S-L-C(SNO, SDEPT, SLOC, CNO, G) • 函数依赖图 关系模式S-L-C是不是2NF? 不是,因为SDEPT和SLOC部分依赖于码 前面的实例是不是2NF?
不是2NF可能出现的问题 • 插入异常 • 某学生没有选课时,无法插入其系、住处等信息 • 删除异常 • 某学生所有的选课信息都删除后,其系、住处等信息也被删除 • 修改复杂(更新异常) • 学生转系时,除了修改其系名外,还需修改其住处信息;另外,若该学生选修了多门课程,则其对应的重复存储的系、住处等信息需一一修改 • 冗余 • 同系的所有学生的住处信息重复存储,同一学生选多门课程时,其系、住处信息重复存储
SDEPT SNO G CNO SLOC 解决办法 • 模式分解 • 依赖关系分析 • 上例中的模式分解为下列两个模式,该模式是2NF SC(SNO, CNO, G) (SNO, CNO)G S-L(SNO, SDEPT, SLOC) SNO SDEPT, SNO SLOC, SDEPT SLOC
分解说明 • 一个1NF,但非2NF的关系总是可以被分解成为一组2NF的关系 • 规范化过程中通过一组投影运算消除部分依赖,建议作如下分解(第一步分解) • 已知关系R(A,B,C,D), (A,B)为主码,即(A,B)->C, (A,B)->D,且A->D, 则将R分解成为两个投影: R1(A,D), A为主码 R2(A,B,C), (A,B)为主码,A为外码 • 这样,R可以通过R1和R2的自然连接运算得以恢复,即满足分解的无损连接性
SDEPT SNO SLOC 5.2.5 3NF • 定义:若R2NF, 且它的任何一个非主属性都不传递依赖于任何候选码,则R 3NF • 说明:即不存在非主属性部分依赖和传递依赖于码的关系为3NF • 推论:不存在非主属性的模式为3NF • 上例中得到的关系模式是2NF SC(SNO, CNO, G); S-L(SNO, SDEPT, SLOC); 可能问题? 如何改造? S-L中存在传递传递依赖,故该模式不是3NF
不是3NF可能存在的问题 • 插入异常 • 只有当知道某学生的系时才能插入其住处信息 • 删除异常 • 当删除某系对应的所有学生时,有关该系学生住处的信息也被删除掉了 • 修改异常 • 一个系及其住处信息重复出现,只更新一个元组中对应的系及其住处时可能导致数据不一致 • 冗余 • 同系学生的住处重复存储
SNO G CNO 解决方法 • 继续模式分解 • 如上例中的模式可分解为3NF SC(SNO, CNO, G); (SNO, CNO) G S-D(SNO, SDEPT); SNO SDEPT D-L(SDEPT, SLOC); SDEPT SLOC SNO SDEPT SLOC SDEPT
分解说明 • 一个2NF,但非3NF的关系总是可以被分解成为一组3NF的关系 • 规范化过程中通过一组投影运算消除传递依赖,建议作如下分解(第二步分解) • 已知关系R(A,B,C), A为主码(A->B, A->C),且B->C, 则将R分解成为两个投影: R1(B,C), B为主码 R2(A,B), A为主码,B为外码 • 这样,R可以通过R1和R2的自然连接运算得以恢复,分解满足分解的无损连接性
3NF的进一步说明 • 在不考虑主属性对码的部分依赖和传递依赖时,可以认为是实现了彻底的分离,已消除了插入异常,删除异常,修改异常,冗余等问题 • 但是,当关系中存在两个或更多的候选码时,尤其是有几个候选码、且候选码内的属性又有部分复合或交迭时,仅仅满足3NF仍有问题,需要进一步分解成BCNF
5.2.6 BCNF (Boyce/Codd Normal Form) • 定义:若每一个决定因素都包含(或是)码,则R BCNF • 说明 • BCNF中所有的依赖都是包含码的依赖 • 一个BCNF范式必是3NF,但一个3NF范式不一定是BCNF (3NF中可能存在主属性对码的部分和传递依赖) • BCNF是在函数依赖范畴内对关系模式的彻底分离,已消除了插入和删除异常 • 通常认为BCNF是扩充的第三范式,一般数据库设计达到BCNF已足够
实例 • 例1: SJP(学生S, 课程J, 名次P) • (S,J)和(J,P) 均为候选码 • 函数依赖为(S,J)P, (J,P) S 其中,两个决定因素均包含(是)候选码 可见SJP BCNF • 例2: STJ(学生S, 教师T, 课程J) • (S,T)和(S,J) 均为候选码 • 函数依赖为(S,J) T, (S,T) J, T J 其中,T为决定因素,但不包含任何一个候选码 可见STJ 3NF, 但STJ BCNF
SNO G CNO 例子 • 前例是3NF, 也是BCNF SC(SNO, CNO, G); (SNO, CNO) G S-D(SNO, SDEPT); SNO SDEPT D-L(SDEPT, SLOC); SDEPT SLOC SNO SDEPT SLOC SDEPT