跳到主要内容

任务六 关系模式的规范化

知识点​

1. 什么是关系模式的规范化?为什么要规范化?​

答:关系模式的规范化就是指由一个低级范式通过模式分解转换为若干个高级范式的过程。

如果一个关系没有进行规范化,可能导致以下问题:

  • 数据冗余大:相同数据重复存储,浪费存储空间
  • 数据更新不一致:同一数据在多处存储,更新时可能只修改了部分,导致数据不一致
  • 数据插入异常:该插入的数据无法插入
  • 数据删除异常:删除不该删除的数据

2. 什么是范式(NF)?有哪些级别?​

答:范式(Normal Form,NF)即规范化的关系模式,是衡量关系模式好坏的一组规则的集合。根据规范化的程度不同,范式有不同的级别,级别越高,其包含的限制约束条件越严格,关系产生数据冗余和操作异常的情况就越少。

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BC范式(BCNF)、第四范式(4NF)、第五范式(5NF)。一般来说,数据库只需满足第三范式就行了。

3. 范式之间的关系是什么?​

答:高一级别的范式是在低一级别范式应满足的限制条件基础上再增加一些额外的限制条件。如第二范式是在第一范式的基础上增加约束条件,第三范式又在第二范式的基础上增加约束条件,以此类推。因此,满足高一级别范式的关系模式必定满足低一级别的范式要求。即:5NF ⊃ 4NF ⊃ BCNF ⊃ 3NF ⊃ 2NF ⊃ 1NF。

4. 什么是第一范式(1NF)?​

答:如果关系模式R中的所有属性都是不可分的数据项,则称R属于第一范式,记为R∈1NF。

关系的第一范式是关系要满足的最基本的范式,在关系数据库中,任何关系都必须满足第一范式。第一范式要求每个属性的值都是原子的(不可再分),不能包含重复组或嵌套结构。

5. 什么是第二范式(2NF)?​

答:若关系模式R∈1NF,且每个非主属性都完全依赖于R的码,则R∈2NF。

第二范式在第一范式的基础上,消除了非主属性对码的部分函数依赖。如果关系模式的码是组合码(多个属性),则需要检查每个非主属性是否完全依赖于整个码,而不是仅依赖于码的一部分。

6. 什么是第三范式(3NF)?​

答:对于关系模式R,每一个非主属性既不部分函数依赖于码,也不传递函数依赖于码,则R∈3NF。

第三范式在第二范式的基础上,进一步消除了非主属性对码的传递函数依赖。如果A→B,B→C,且B不能决定A,则称C对A传递函数依赖。

7. 请举例说明如何从1NF分解到2NF?​

答:以"学生课程成绩"表为例,关系模式为:学生课程成绩(学号,姓名,性别,专业,班级名,班主任,课程号,课程名,课时,成绩)。

该关系的码是(学号,课程号),其中"成绩"完全依赖于码,但"姓名""性别""专业""班级名""班主任"只依赖于学号,"课程名""课时"只依赖于课程号,存在部分函数依赖,不满足2NF。

分解方法:消除部分依赖,将函数依赖于学号的属性放入"学生_班级"模式,函数依赖于课程号的属性放入"课程"模式,剩余的放入"成绩"模式:

  • 学生_班级(学号,姓名,性别,专业,班级名,班主任)
  • 课程(课程号,课程名,课时)
  • 成绩(学号,课程号,成绩)

分解后三个关系模式都满足2NF。

8. 请举例说明如何从2NF分解到3NF?​

答:以上述分解后的"学生_班级(学号,姓名,性别,专业,班级名,班主任)"为例,该关系满足2NF但存在传递依赖:学号→班级名,班级名→班主任,即班主任传递依赖于学号,不满足3NF。

分解方法:消除传递依赖,将"班主任"分离到新的关系模式中:

  • 学生(学号,姓名,性别,专业,班级名)
  • 班级(班级名,班主任)

分解后"学生"和"班级"都满足3NF。而"课程"和"成绩"模式中没有传递依赖,已经满足3NF。

9. 第二范式有哪些结论?​

答:由2NF的定义可以得出以下结论:

  1. 如果一个关系模式R∈1NF,且R中没有非主属性,则R∈2NF
  2. 如果一个关系模式R∈1NF,且R中所有的候选码都是单属性码,则R∈2NF
  3. 如果一个关系模式R只有两个属性,则R∈2NF
  4. 如果一个关系模式R∈2NF,则R∈1NF

10. 第三范式有哪些结论?​

答:由3NF的定义可以得出以下结论:

  1. 如果一个关系模式R∈1NF,且R中没有非主属性,则R∈3NF
  2. 如果一个关系模式R只有两个属性,则R∈3NF
  3. 如果一个关系模式R∈3NF,则R∈2NF和1NF

11. 什么是部分函数依赖?​

答:部分函数依赖是指关系模式中某个非主属性依赖于组合码的一部分,而不是整个码。例如,关系模式R(A, B, C, D)中码为(A, B),如果C只依赖于A而不依赖于B,则C对码(A, B)是部分函数依赖。部分函数依赖是导致不满足2NF的原因。

12. 什么是传递函数依赖?​

答:传递函数依赖是指关系模式中某个非主属性通过另一个属性间接依赖于码。即如果X→Y,Y→Z,且Y不能决定X(Y ↛ X),则称Z对X传递函数依赖。传递函数依赖是导致不满足3NF的原因。

13. 模式分解时需要注意什么?​

答:模式分解时需要注意:

  • 保持函数依赖性:分解后的关系模式应保持原关系模式中的函数依赖关系
  • 无损连接性:分解后的关系模式通过自然连接应能恢复原关系的所有数据,不丢失信息
  • 在分解时应添加必要的属性(如主码或外键)到新的关系模式中,以保持分解的无损连接和函数依赖性

14. 什么是BC范式(BCNF)?​

答:BC范式(Boyce-Codd Normal Form)是第三范式的改进版。对于关系模式R,如果对于每一个非平凡的函数依赖X→Y,X都包含码(即X是超码),则R∈BCNF。

BCNF比3NF更严格,它要求所有决定因素都必须是候选码,而3NF只要求非主属性不部分依赖和传递依赖于码。一般来说,数据库设计满足3NF即可,BCNF是更高级别的规范化。