我有一个表 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?
据我所知,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 中是允许的。