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

这个作业属于哪个课程 https://edu.cnblogs.com/campus/uzz/cs3
这个作业要求在哪里 https://edu.cnblogs.com/campus/uzz/cs3/homework/13106
这个作业的目标 第9次作业-知识点整理:关于函数依赖定义、函数依赖类型

函数依赖

一、不良的模式设计

(一)关系模式中可能存在的异常
1.数据冗余:指同一个数据被重复存储很多次,导致存储空间的浪费。
2.更新异常:指对冗余数据没有全部修改而出现数据不一致的问题。
3.插入异常:指应该插入到关系中的数据而不能插入。
4.删除异常:指不应该删除的数据而被关系中删除了。
(二)、关系模式中存在异常的原因
1.数据依赖:关系模式中属性之间存在的依赖关系。
2.异常现象产生的原因;关系模式中才在的这些复杂的数据依赖关系所导致的。
3.解决:关系模式规范化,将单一的关系模式分解为数据依赖关系单纯化的多个模式。

二、

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

R为关系名;
U为关系的属性集合;
D为属性集U中属性的数据域;
Dom为属性到域的映射;
F为属性集U的数据依赖集。
关系模式可以用三元组简单表示为:
R〈U,F〉
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。
3.函数依赖的定义:
(1)函数依赖是数据库设计的核心部分。
(2)什么是函数依赖: 设R(U)是属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,对于X的每一个具体值,Y都有唯一的具体的值与之对应,则称X函数决定Y,或Y函数依赖于X,记作 X→Y。
(3)函数依赖说明
函数依赖是语义范畴的概念;函数依赖关心的问题是一个或一组属性的值决定其他属性的值;函数依赖不是指关系模式R的某个或某些元组满足的约束条件,而是指R的所有元组均要满足的约束条件,不能部分满足。
4.平凡(trivial)/非平凡的函数依赖
简单来说平凡的函数依赖的成立是“自然而然”的集合包含关系造成的
定义(平凡/非平凡的FD)

5.完全函数依赖和部分函数依赖
有一个关系模式S(Sno,Sname,Cno,Grade)
完全函数依赖:如果我想知道某位学生的某一门课的成绩Grade,那我必须得同时知道他的学号Sno和课程号Cno。
但如果我只知道一部分信息,比如他的Sno或者Cno可以吗?答案是不行的!此时称Y[Grade]完全依赖于X[Sno,Cno]。

部分函数依赖:如果我想知道某位学生的姓名Sname,那我知道他的学号Sno就可以了。也就是说Y[Sname]只函数依赖于X[Sno,Cno]中的子集x[Sno],此时称Y部分函数依赖于X。

6.传递函数依赖
有一个关系模式S(Sno,Sdept,Mname)
如果我知道了一个学生的学号Sno,那我就能知道他所在的系Sdept。(因为理论上一个学生只属于一个系)
如果我知道了某一个系Sdept,那么我就能知道这个系的系主任的姓名Mname。(一个系只有一个正的系主任,别杠,你赢了。)
也就是说,我知道了一个学生的学号Sno,其实我就知道了他所在系的系主任的姓名Mname。但这个过程中,他们是不存在直接函数依赖的,我需要通过系名称Sdept作为一个桥梁去把二者联系起来的。

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

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

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

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

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

(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之间不存在函数依赖关系。
由于函数依赖与属性之间的联系类型有关,所以在确定属性间的函数依赖关系时,可以从分析属性间的联系类型入手,便可确定属性间的函数依赖。
8.总结
通过学习完全函数依赖、部分函数依赖和传递函数依赖,我们强调了函数依赖在确保数据库的数据完整性、一致性和性能方面的不可或缺性。 首先,我们理解了函数依赖的基本定义,其中自变量与因变量之间的关系是数据库设计的基石。 通过实际示例和解释,我们揭示了函数依赖如何帮助我们规范数据库中的数据,确保数据的一致性。 然后,我们深入研究了三种常见的函数依赖类型:完全函数依赖、部分函数依赖和传递函数依赖。 这些类型的理解对于设计复杂数据库架构至关重要,因为它们可以帮助我们确定数据关系,消除冗余信息,提高数据库性能。 在实际数据库设计中,函数依赖的应用不仅仅是一种理论概念,还是一种强大的工具,用于确保数据的准确性和一致性。 通过合理定义和使用函数依赖,我们可以避免数据异常和错误,提高数据库的可维护性。
9.思维导图

posted @ 2023-11-18 10:33  栾天宇  阅读(196)  评论(0)    收藏  举报