4

我目前正在学习函数依赖,并且正在努力理解它们背后的概念。

说我有桌子:

顾客

|-----------|--------------|------------|------------------|------------------|
|Cust-ID    | Cust-FName   |Cust-LName  |Cust-Email        |Cust-Pw           |
|-----------|--------------|------------|------------------|------------------|
|1          |John          |Smith       |jsmith@email.com  |srt6564sdgjhy55y  |
|2          |Adam          |Borneo      |adb@hotmail.com   |45657ythjdfgqAfd  |
-------------------------------------------------------------------------------

有两个候选键:cust-ID 和 cust-Email(只有一个电子邮件地址可能属于一个客户)。选择 cust-ID 作为 PK,唯一的功能依赖是:

{Cust-ID} -> {Cust-FName, Cust-LName, Cust-Email, Cust-Pw}?

或者,我会绘制/表示两个候选键:

{Cust-ID} -> {Cust-FName, Cust-LName, Cust-Email, Cust-Pw}

{Cust-Email} -> {Cust-ID, Cust-FName, Cust-LName, Cust-Pw}?

本能告诉我前者,但鉴于这是一个全新的话题,我将不胜感激任何帮助!

4

2 回答 2

2

两个都

{Cust-ID} -> {Cust-FName, Cust-LName, Cust-Email, Cust-Pw}

{Cust-Email} -> {Cust-ID, Cust-FName, Cust-LName, Cust-Pw}

在您的情况下是功能依赖项。

函数依赖是这样的情况:只要有两行箭头左侧的列具有相同的值,则箭头右侧的列的值必须相等。如果您有两行具有相同的客户 ID,则名称、电子邮件和密码列必须相同。如果您有两行具有相同的客户电子邮件,那么(在您的示例中)名称、电子邮件和密码列必须相同。

如果您的表不是第三范式,那么您可能与左侧键的适当子集具有功能依赖关系。实际上,您根据功能依赖关系定义候选键和范式(2NF、3NF、BCNF)。

您可以在我们公司的博客上阅读更多关于功能依赖的信息。这是关于数据规范化的系列文章的第一部分。

于 2014-03-07T11:48:42.030 回答
2

功能依赖集始终是 [candidate] 键的超集。换句话说,是具有覆盖整个关系的属性列表的功能依赖关系。因此,您列出的两个候选键也是功能依赖项。

于 2012-12-14T22:37:00.463 回答