本文共 1567 字,大约阅读时间需要 5 分钟。
第一范式(1NF):字段都是单一属性的,分量不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。
第二范式(2NF):不存在非关键字段对任一候选键字段的部分函数依赖 / 所有非关键字段都完全依赖于任意一组候选关键字(例:候选键ABC,非主属性D,如果ABC–>D则满足2NF;如果AB–>D,则非2NF)。
第三范式(3NF):在2NF基础上,不存在非关键字段对任一候选关键字段的传递函数依赖。传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系: 关键字段 → 非关键字段x → 非关键字段y 。
BCNF: 在3NF的基础上不存在关键字段决定关键字段的情况,每个属性都不传递依赖于键码。
参考:https://blog.csdn.net/xingchenhy/article/details/71424906注:这样得到的模式集是R的一个分解,具有无损分解和保持函数依赖
例:设R(ABCD),F是R上的FD集,F={AB→CD,A→D},说明R为什么不是3NF,试把R分解为3NF
解:1)判断 可知,AB是候选键,存在传递依赖;AB →A, A →D不满足定义17 非主属性传递依赖于候选键,或者 A →D不满足定义18 A不是超键 所以, R不是3NF. 2)R的分解: 最小函数依赖集 右边单属性: AB →C, AB→D,A→D 左部不可约: AB →C, A→D,A→D 去除冗余: AB →C, A→D 候选键是: AB 可分解为: R1={ABC}, R2={AD} 因为R1中已经包含候选键AB因而不用写新的模式
例:R(ABCDE),F={B→C,B→E,C→B,C→D},将R分解为3NF
解: 最小函数依赖集 右边单属性: B→C,B→E,C→B,C→D 左部不可约: B→C,B→E,C→B,C→D 去除冗余: B→C,B→E,C→B,C→D 合并: : B→CE; C→BD 候选键:AB, AC 可分解为: R1={BCE}, R2={CBD}; R3={AB}; R4={AC}
注:这样得到的模式集是R的一个分解,具有无损分解,但不一定保持函数依赖
例:R(CGHRST),F={ C→T,HR→C,TH→R,CS→G,HS→R },将R分解分解为BCNF
解:候选键为: HS+={HSRCTG} (尽量先选择X–>Y的Y在F集中只在右边出现;其次选择Y没有在别的函数依赖左边出现的;最后选择超键,把候选键留到最后) ①选 CS →G; ρ = {CSG, CHRST} R1={CSG}是 BCNF;R2={CHRST} F2={C→T,HR→C,TH→R,HS→R} ②选C→T; ρ = {CT, CHRS} R3={CT}是 BCNF;R4={CHRS} F4={HS→R}, HR →C} ③选HR →C; ρ = {HRC,HSR} R5={HRC}是 BCNF;R6={HSR}也是BCNF,都是BCNF可以停止 所以,分解成ρ={CSG,CT,HRC,HSR}