第9次作业-知识点整理:关于函数依赖定义、函数依赖类型

发布时间 2023-11-15 21:41:17作者: 是夏木啊
这个作业属于哪个课程 https://edu.cnblogs.com/campus/uzz/cs3
这个作业要求在哪里 https://edu.cnblogs.com/campus/uzz/cs3/homework/13106
这个作业的目标 第9次作业-知识点整理:关于函数依赖定义、函数依赖类型

?函数依赖?

?1. 不良的模式设计

会造成各种异常现象,简单归为:
* 数据冗余
* 插入异常(有的信息无法插入)
* 删除异常(删除一部分却变成要删整条记录)
* 更新异常(容易漏改一部分记录造成数据不一致性)

不良特性分析:

* 插入异常:如果学生没有选课,关于他的个人信息及所在系的信息就无法插入
* 删除异常:如果删除学生的选课信息,则有关他的个人信息及所在系的信息也随之删除了
* 更新异常:如果学生转系,若他选修了k门课,则需要修改k次
* 数据冗余:如果一个学生选修了k门课,则有关他的所在系的信息重复
* 但冗余在一定程度上也可减小时间开销

这些异常,归根结底由数据依赖引起。其中,函数依赖是最重要的数据依赖

?2. 函数依赖

?2.1 关系模式的表示

关系模式的完整表示是一个五元组:
R〈U,D,Dom,F〉
其中:

  • R为关系名
  • U为关系的属性集合
  • D为属性集U中属性的数据域;
  • Dom为属性到域的映射;
  • F为属性集U的数据依赖集
  • 关系模式可以用三元组简单表示为:
    R〈U,F〉

?2.2 函数依赖理论

  • 关系模式中的各属性之间相互依赖、相互制约的联系称为数据依赖
  • 数据依赖一般分为函数依赖、多值依赖和连接依赖
  • 其中,函数依赖是最重要的数据依赖
    函数依赖(Functional Dependency)是关系模式中属性之间的一种逻辑依赖关系

示例:

  • 例如在上一节介绍的关系模式SCD中,SNO与SN、AGE、DEPT之间都有一种依赖关系。
  • 由于一个SNO只对应一个学生,而一个学生只能属于一个学院,所以当SNO的值确定之后,SN,AGE,DEPT的值也随之被唯一的确定了。
  • 这类似于变量之间的单值函数关系。设单值函数Y=F(X),自变量X的值可以决定一个唯一的函数值Y。
  • 在这里,我们说SNO决定函数(SN,AGE,DEPT),或者说(SN,AGE,DEPT)函数依赖于SNO。

?2.2.1 函数依赖的定义

  • 设关系模式R(U,F),U是属性全集,F是U上的函数依赖集,X和Y是U的子集:

  • 如果对于R(U)的任意一个可能的关系r,对于X的每一个具体值,Y都有唯一的具体值与之对应(也就是对任意t1、t2属于r, 如果 t1[X]=t2[X] 有t1[Y]=t2[Y]),则称X决定函数Y,或Y函数依赖于X,记作X→Y。我们称X为决定因素,Y为依赖因素。

  • 当Y不函数依赖于X时,记作:X Y(箭头加一反斜杠)。

  • 当X→Y且Y→X时,则记作:X ↔ Y(双边箭头)。

  • 这类似于变量之间的单值函数关系。设单值函数Y=F(X),自变量X的值可以决定一个唯一的函数值Y。
    示例:

  • 对于关系模式SCD

U= {SNO,SN,AGE,DEPT,MN,CNO,SCORE}

F= {SNO→SN,SNO→AGE,SNO→DEPT,… }

  • 一个SNO有多个SCORE的值与其对应,因此SCORE不能唯一地确定,即SCORE不能函数依赖于SNO,所以有:SNO  SCORE。
  • 但是SCORE可以被(SNO,CNO) 唯一地确定。所以可表示为:(SNO,CNO)→SCORE

?2.2.2 平凡(trivial)/非平凡的函数依赖

简单来说平凡的函数依赖的成立是“自然而然”的集合包含关系造成的

?2.2.3 完全/部分函数依赖

Y部分依赖于X意思就是Y只依赖X的一部分(真子集),类似超码与候选码

只有当决定因素是组合属性时,讨论部分函数依赖才有意义,当决定因素是单属性时,只能是完全函数依赖。

?2.2.4 传递函数依赖

?2.2.5 关于函数依赖的说明

1.函数依赖是语义范畴的概念. 它反映了一种语义完整性约束,只能根据语义来确定一个函数依赖:

  • 例如,对于关系模式S,当学生不存在重名的情况下,可以得到:
    SN→AGE
    SN→DEPT
  • 这种函数依赖关系,必须是在没有重名的学生条件下才成立的,否则就不存在函数依赖了。
  • 所以函数依赖反映了一种语义完整性约束

2.函数依赖关系的存在与时间无关。

  • 因为函数依赖是指关系中的所有元组应该满足的约束条件,而不是指关系中某个或某些元组所满足的约束条件。
  • 当关系中元组增加、删除或更新的后都不能破坏这种函数依赖。
  • 因此,必须根据语义来确定属性之间的函数依赖,而不能单凭某一时刻关系中的实际数据值来判断。
  • 例如,对于关系模式S,假设没有给出无重名的学生这种语义规定,则即使当前关系中没有重名的记录,也只能存在函数依赖SNO→SN,而不能存在函数依赖SN→SNO,因为如果新增加一个重名的学生,函数依赖SN→SNO必然不成立。
  • 所以函数依赖关系的存在与时间无关,而只与数据之间的语义规定有关。

3.函数依赖与属性之间的联系类型有关。

  • (1)在一个关系模式中,如果属性X与Y有1:1联系时,则存在函数依赖X→Y,Y→X,即X ↔ Y。
  • 例如,当学生无重名时,SNO与SN。
  • (2)如果属性X与Y有m :1的联系时,则只存在函数依赖X→Y。
  • 例如,SNO与AGE,DEPT之间均为m:1联系,所以有SNO→AGE,SNO→DEPT。
  • (3)如果属性X与Y有m:n的联系时,则X与Y之间不存在任何函数依赖关系。
  • 例如,一个学生可以选修多门课程,一门课程又可以为多个学生选修,所以SNO与CNO之间不存在函数依赖关系。
  • 由于函数依赖与属性之间的联系类型有关,所以在确定属性间的函数依赖关系时,可以从分析属性间的联系类型入手,便可确定属性间的函数依赖。

?3.总结

  • 本文深入探讨了函数依赖的概念及其在数据库设计中的关键作用。通过学习完全函数依赖、部分函数依赖和传递函数依赖,我们强调了函数依赖在确保数据库的数据完整性、一致性和性能方面的不可或缺性。

  • 首先,我们理解了函数依赖的基本定义,其中自变量与因变量之间的关系是数据库设计的基石。通过实际示例和解释,我们揭示了函数依赖如何帮助我们规范数据库中的数据,确保数据的一致性。

  • 然后,我们深入研究了三种常见的函数依赖类型:完全函数依赖、部分函数依赖和传递函数依赖。这些类型的理解对于设计复杂数据库架构至关重要,因为它们可以帮助我们确定数据关系,消除冗余信息,提高数据库性能。

  • 在实际数据库设计中,函数依赖的应用不仅仅是一种理论概念,还是一种强大的工具,用于确保数据的准确性和一致性。通过合理定义和使用函数依赖,我们可以避免数据异常和错误,提高数据库的可维护性。

  • 函数依赖是数据库领域中不可或缺的概念,它有助于我们构建高效、可靠的数据库系统。无论您是数据库管理员、开发人员还是数据科学家,深入理解和应用函数依赖都将提高您在数据库领域的专业素养,并为您的项目和组织带来巨大的益处。在未来的数据库设计和管理中,不要忽视函数依赖的重要性,它将成为您成功的关键因素之一。
    思维导图: