Skip to content

关系数据理论 ​

学习目标 ​

  • 理解函数依赖的概念和性质
  • 掌握码的概念和求解方法
  • 理解范式的概念和作用
  • 掌握1NF、2NF、3NF、BCNF的定义和判断
  • 学会数据库模式的规范化设计
  • 了解多值依赖和4NF的概念

6.1 问题的提出 ​

6.1.1 关系模式中可能存在的问题 ​

考虑学生选课关系:

Student(Sno, Sname, Sdept, Mname, Cno, Grade)

存在的问题:

  1. 数据冗余:学生姓名、系别、系主任在多个元组中重复出现
  2. 更新异常:修改学生系别时,需要修改多个元组
  3. 插入异常:无法插入尚未选课的学生信息
  4. 删除异常:删除学生的最后一门选课记录时,学生信息也被删除

6.2 规范化 ​

6.2.1 函数依赖 ​

函数依赖的定义 ​

设R(U)是一个关系模式,X和Y是U的子集。如果对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称"X函数确定Y"或"Y函数依赖于X",记作X→Y。

函数依赖的类型 ​

6.2.2 码 ​

码的定义 ​

设K为R<U,F>中的属性或属性组合。若K→U,则K称为R的一个超码。 若K是超码,且K的任何真子集都不是超码,则K称为R的候选码。

6.2.3 范式 ​

第一范式(1NF) ​

如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。

第二范式(2NF) ​

若R∈1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R∈2NF。

第三范式(3NF) ​

设关系模式R<U,F>∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Z⊄Y),使得X→Y,Y→Z,则称R<U,F>∈3NF。

BC范式(BCNF) ​

设关系模式R<U,F>∈1NF,若X→Y且Y⊄X时X必含有码,则R<U,F>∈BCNF。

6.3 数据依赖的公理系统 ​

6.3.1 Armstrong公理系统 ​

6.3.2 函数依赖集的闭包 ​

算法:求属性集X关于函数依赖集F的闭包X+

6.4 模式的分解 ​

6.4.1 模式分解的标准 ​

6.4.2 3NF的分解算法 ​

6.5 多值依赖 ​

6.5.1 多值依赖的定义 ​

设R(U)是一个关系模式,X、Y、Z是U的子集,且Z=U-X-Y。多值依赖X→→Y成立,当且仅当对R的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关。

6.5.2 第四范式(4NF) ​

关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y⊄X),X都含有码,则R<U,F>∈4NF。

6.6 学习检查点 ​

6.6.1 重点概念总结 ​

6.6.2 练习题 ​

  1. 函数依赖判断题

    • 给定关系模式和函数依赖集,判断各种函数依赖关系
    • 求属性集的闭包
    • 求候选码
  2. 范式判断题

    • 判断关系模式属于哪个范式
    • 找出违反范式的函数依赖
    • 进行模式分解
  3. 综合应用题

    • 设计满足特定范式的关系模式
    • 分析实际问题中的数据依赖关系

6.6.3 思考题 ​

  1. 为什么需要数据库规范化?规范化的优缺点是什么?
  2. 3NF和BCNF的区别是什么?什么情况下需要使用BCNF?
  3. 如何在保证数据一致性和查询效率之间找到平衡?
  4. 多值依赖与函数依赖有什么区别和联系?

6.7 实践应用 ​

6.7.1 规范化设计步骤 ​

6.7.2 常见设计模式 ​

  1. 一对一关系:可以合并为一个关系
  2. 一对多关系:在"多"的一方添加外码
  3. 多对多关系:需要建立中间关系表

本章小结:关系数据理论为数据库设计提供了理论基础,通过函数依赖分析和范式理论,可以设计出结构良好、避免异常的关系模式。掌握这些理论对于数据库设计和优化具有重要意义。


上一章: 第5章 数据库完整性
下一章: 第7章 数据库设计

数据库原理课程学习笔记