我目前正在学习功能依赖,并且正在努力探索它们背后的概念。
说我有桌子:
客户
|-----------|--------------|------------|------------------|------------------|
|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作为P.K,唯一的功能依赖是:
{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}
?
本能告诉我前者,但鉴于这是一个全新的话题,我会感激任何帮助!
答案 0 :(得分:1)
功能依赖集始终是[候选]键的超集。换句话说, key 是一个功能依赖,其属性列表覆盖整个关系。因此,您列出的两个候选键也都是函数依赖项。
答案 1 :(得分:0)
两者
{Cust-ID} -> {Cust-FName, Cust-LName, Cust-Email, Cust-Pw}
{Cust-Email} -> {Cust-ID, Cust-FName, Cust-LName, Cust-Pw}
是您的案例中的功能依赖项。
功能依赖是这样的情况:每当你有两行对箭头左侧的列具有相同的值时,右边的列的值箭头的一面必须相等。如果您有两行具有相同的Cust-ID,则名称,电子邮件和密码列必须相同。如果您有两行具有相同的Cust-Email,那么(在您的示例中)名称,电子邮件和密码列必须相同。
如果您的表格不在第三范式,那么您可能在左侧有一个适当的密钥子集功能依赖。实际上,您根据功能依赖性定义了候选键和普通表单(2NF,3NF,BCNF)。
您可以在functional dependencies on our company blog上阅读更多内容。这是关于数据规范化的一系列帖子的第一部分。