关系模式化的规范化理论

2023-12-13 16:35:35

数据库规范化中的“函数依赖”是理解和应用规范化过程的关键概念。函数依赖描述了一个或多个列(属性)如何唯一确定另一个列的值。

函数依赖的基本概念:

  • 函数依赖:如果在一个给定的关系中,对于某个属性集合 ( A ) 的每个可能的值,都有一个唯一的属性集合 ( B ) 的值与之对应,则说 ( B ) 函数依赖于 ( A )。记作 ( A —>B )。
  • 完全函数依赖:如果 ( B ) 函数依赖于一个组合属性 ( A ),并且对于 ( A ) 中的任何一个真子集 ( A’ ),( B ) 都不依赖于 ( A’ ),则称 ( B ) 完全函数依赖于 ( A )。
  • 部分函数依赖:如果 ( A ) 是一个组合属性,并且 ( B ) 函数依赖于 ( A ) 中的一个真子集,则称 ( B ) 部分函数依赖于 ( A )。
  • 传递依赖:如果存在一个属性集 ( C ),使得 ( B ) 函数依赖于 ( C ),而 ( C ) 又函数依赖于 ( A ),则称 ( B ) 传递依赖于 ( A )。

表格示例 - 学生选课信息表

假设我们有一个表格 StudentCourses,其中包含以下列:

StudentIDStudentNameCourseIDCourseNameDepartmentIDDepartmentName

函数依赖分析

  1. 函数依赖:
    • StudentID → StudentName:学生ID唯一确定学生姓名。
    • CourseID → CourseName:课程ID唯一确定课程名称。
    • DepartmentID → DepartmentName:部门ID唯一确定部门名称。
  2. 完全函数依赖:
    • 假设 (StudentID, CourseID) 联合唯一标识每条选课记录,那么我们可以说,学生ID和课程ID的组合完全确定每条选课记录。
  3. 部分函数依赖:
    • 如果 StudentName 只依赖于 StudentID 而不是 (StudentID, CourseID) 的整个组合,则存在部分函数依赖。同样,CourseName 只依赖于 CourseID
  4. 传递依赖:
    • 如果 DepartmentID 依赖于 CourseID,而 DepartmentName 又依赖于 DepartmentID,则 DepartmentNameCourseID 存在传递依赖。

范式

为了解决这些依赖关系带来的问题(如数据冗余和更新异常),我们可以通过规范化过程将这个表分解为几个较小的表:

  1. 第一范式 (1NF):
    • 数据表的每一列都是不可分割的基本数据项。
    • 同一列中的值都是同一类型。
    • 每一列都有唯一的名称。
    • 每个单元格的值都是单一的(不包含多个值)。
  2. 第二范式 (2NF):
    • 已经满足1NF。
    • 表中的所有非键属性都完全依赖于主键(消除了部分依赖)。
  3. 第三范式 (3NF):
    • 已经满足1NF和2NF。
    • 表中的所有非键属性不仅完全依赖于主键,而且还是直接依赖于主键(消除了传递依赖)。

结果 - 规范化后的表

  • Students Table:

    StudentIDStudentName
  • Courses Table:

    CourseIDCourseNameDepartmentID
  • Departments Table:

    DepartmentIDDepartmentName

通过这种方式,我们可以有效地减少数据冗余,减少更新、插入和删除异常,提高数据完整性和查询效率。

文章来源:https://blog.csdn.net/weixin_53285092/article/details/134974525
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。