如果我的表只有一个主键但其他三个列可以唯一标识一个元组,它是否满足 3NF?

问题描述 投票:0回答:1

我有一个表 Customers,其中有一个主键 Customer_ID 和三列地址、电话号码和电子邮件,所有这些列对于每个元组都有唯一的值。

我提出的功能依赖之一是 Customer_ID -> { First_Name, Last_Name, Address, Phone_Number, Email }。由于 Address、Phone_Number 和 Email 具有唯一值,这是否意味着非素数属性 First_Name 和 Last_Name 依赖于同样是非素数属性的 Address、Phone_Number 和 Email,从而违反了 3NF?或者可以用Address、Phone_Number、Email作为候选键,从而满足3NF?

sql normalization database-normalization 3nf third-normal-form
1个回答
0
投票

据我所知,Customers 表有一个主键

Customer_ID
和三列
Address
Phone_Number
Email
,所有这些列对于每个元组都有唯一的值。这意味着每个属性都可以唯一标识关系中的元组,使它们成为候选键。

在数据库规范化中,第三范式(3NF)要求所有属性在功能上依赖于主键,并且对于非主属性不存在传递依赖。传递依赖意味着一个非主属性依赖于另一个非主属性。

鉴于

Address
Phone_Number
Email
是候选键,它们不会违反 3NF,因为依赖于候选键的任何属性都满足 3NF。

因此,函数依赖

Address -> {First_Name, Last_Name}
Phone_Number -> {First_Name, Last_Name}
Email -> {First_Name, Last_Name}
都属于 3NF,因为
Address
Phone_Number
Email
是候选键。

我假设所描述的关系不违反 3NF,并且非素数属性

First_Name
Last_Name
不依赖于其他非素数属性。相反,我认为它们依赖于候选键,这在 3NF 中是允许的。

© www.soinside.com 2019 - 2024. All rights reserved.