在尝试了解3NF之后,我遇到了一个小问题,我不确定我是否正确理解。
问题出现在结构组件中,如下所示:
s = {
Product(ProductID, ProductName, ProductDescription, SupplierName, SupplierAddress, SupplierID)
}
F = {
ProductID -> ProductName, ProductDescription
SupplierID -> SupplierName, SupplierAddress
}
当然,默认情况下,我会将SupplierName和SupplierAddress都移动到不同的实体/表。问题以SupplierID的形式出现。我不知道将ProductID保留在Product表/实体中是否可以。
问题是,SupplierID不依赖于ProductID(因为它是在F中写的)。我相信将它放入第3个表(如下)会没问题。
S = {
Products(ProductID, ProductName, ProductDescription),
Suppliers(SupplierID, SupplierName, SupplierAddress),
PS(ProductID, SupplierID)
}
但是,如果我将SupplierID放在Products表中(根本没有“PS”表),3NF是否仍然可以。
答案 0 :(得分:0)
三个关系中的分解在3NF中是正确的,而如果您将SupplierID放在Product表中,则您获得的关系甚至不是2NF。
事实上,在关系中:
R1(ProductDescription, ProductID, ProductName, SupplierID)
因为以下两个依赖项存在:
ProductID → ProductName
ProductID → ProductDescription
关系的(唯一)候选键是(ProductID,SupplierID)。这意味着前两个依赖项违反了3NF,因为左侧不是超级键,右侧是非主要属性。