欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

边学边思考数据库中函数依赖与多值依赖的辨析

程序员文章站 2024-01-28 22:37:58
...

我们先复习下什么是函数:函数是发生在集合之间的一种对应关系(我喜欢用图理解) 数据库中讨论得比较多是非平凡函数依赖,而平凡意义不大) 因为成绩不是(学号,课程)的子集。 部分函数依赖:(学号,姓名)→ 性别 因为(学号,姓名)→ 性别 且 学号 →

我们先复习下什么是函数:函数是发生在集合之间的一种对应关系(我喜欢用图理解)

边学边思考数据库中函数依赖与多值依赖的辨析数据库中讨论得比较多是非平凡函数依赖,而平凡意义不大)

因为成绩不是(学号,课程)的子集。

部分函数依赖:(学号,姓名)→ 性别

因为(学号,姓名)→ 性别 且 学号 → 性别

完全函数依赖:(学号,课程号)→ 成绩

因为(学号,课程号)→ 成绩,学号 —\→ 成绩,课程号 —\→ 成绩。

传递函数依赖: 学号 → 系主任

因为学号 → 系名,系名 → 系主任 且 系名 —\→ 学号。

而多值依赖呢?给出定义

多值依赖的定义:
设R(U)是一个属性集合U上的一个关系模式,X, Y, 和Z是U的子集,并且Z=U-X-Y,多值依赖X->->Y成立当且仅当对R的任一个关系r,r在(X,Z)上的每个值对应一组Y的值,这组值仅仅决定于X值而与Z值无关。
若X->->Y,而Z=空集,则称X->->Y为平凡的多值依赖。否则,称X->->Y为非平凡的多值依赖。

依然用函数的映射关系来理解,引入f(x,y),假设f(x,y)=+-(x^),若z=f(x,y),则一个x值可以得出两个互为相反数的z。在这个二元函数关系中,y的取值事实上是不影响结果的。类比到关系模式上,即x为X集的属性值,y为Y集的属性值,z为Z集的属性值。

看看一个例子

(课程C) ——(教师T)—(参考书B)

数据库概率 —顾国生老师——数学分析
数据库概率 —顾国生老师——高等代数
数据库概率 —顾国生老师——微分方程

上述例子U{C,T,B},其中课程C和教师T唯一确定一组B,却与T无关,经由C决定,然而T并不是空集,所以是非平凡的多值依赖。

事实上,当T为空的时候,如果C中的每一个值c对应B中的一个确定的值,则变为函数依赖,所以函数依赖是多值依赖的一种特殊情况。

总计下:

1. 函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。

2. 函数依赖是语义范畴的概念。只能根据数据的语义来确定函数依赖。(例如“姓名→年龄”这个函数依赖只有在不允许有同名人的条件下成立)

3. 函数依赖通常以集合抽闲出来讨论。

4. 数据库设计者根据需求对函数关系进行制定。例如认为“姓名→年龄”在特定表中可行。

5. 数据库设计者根据现实规定做强制要求。例如规定不允许同名人出现,函数依赖“姓名→年龄”成立。所插入的元组必须满足规定

的函数依赖,若发现有同名人存在, 则拒绝装入该元组。