功能依赖适用于整个数据库或特定关系?

Sar*_*nan 8 schema database-design dependencies

我是 dbms 的新手。我看过一个关于函数依赖的讲座视频。但我有点困惑,函数依赖是对整个数据库还是特定模式的约束?

Tod*_*ett 9

一个函数依赖正是顾名思义-函数的输出总是由输入决定。例如,如果我们有一个函数f(),并提供变量x,并且我们总是收到输出y,那么 y 在功能上依赖于 x。你可以把它想象成一个简单的绘图函数, 2x + 1 = y 将一些样本值插入到我们得到的函数中:

X    Y
------
1    3
2    5
3    7
Run Code Online (Sandbox Code Playgroud)

等等。因此我们知道,对于 x 的每个值,y 的值始终是该 x 的 y 值。

Codd将此应用于数据管理,以确定一个数据元素的值是否总是导致第二个数据元素的已知值,就像它是函数的输入和输出一样。因此,例如,如果我们发现一家小公司的每个员工都有一个员工编号,并且我们创建了一个员工编号和姓名的简单列表,我们会发现该姓名在功能上依赖于该员工编号。例如,每次我们看到员工编号 7 时,我们都会看到“Jim Brown”这个名字。这在数据库中代表了在现实世界中正确的命题——即员工编号 7 是名为“Jim Brown”的人,我们可以指向并说“就是他”。

函数依赖可以实现为唯一约束,因为函数的输入和预期输出之间存在一对一的关系。在代数示例中,当我们将 2 代入等式 2x + 1 时,我们将始终得到 5。将该示例应用于上面示例中的数据管理,每次我们有员工编号 7 时,我们都需要有一个且只有一个姓名和与之相关的其他特征。我们不能再让员工编号 7 与“Jim Brown”“Bob Jones”相关联,就像我们可以说将 7 插入 2x + 1 可以产生 15 和 25 一样。

根据定义,当在每个表上放置唯一约束来标识与另一组数据元素具有一对一关系且其值始终随第一组变化的每组数据元素时,功能依赖性是根据定义实现的。符号通常是:

A,B ---> C
Run Code Online (Sandbox Code Playgroud)

这意味着 A 和 B 的值决定了 C 的值。也许 A 是雇员编号,B 是家属编号,而 C 是家属姓名。因此,从这个意义上说,它们适用于每个数据库中每个模式中的每个表。

Fabian Pascal 的Practical Database Foundation Series和 Chris Date 的Relational Theory for Computer Professionals是关系理论的一些很好的参考资料。