确定外部,主键,1nf,2nf,3nf给定表和功能依赖性

时间:2016-09-12 00:09:11

标签: normalization 3nf

首先,我想说这是过去的家庭作业,我无法弄明白并来到这里要求澄清。我对这个特定问题的规范化遇到了麻烦。

给定

1.PetStore(storeBranchName, storeAddr, storeManager,(customerName, customerAddr, customerPhone,(petName, petBreed, petSex, price) ) )

FDS

storeBranchName → storeAddr, storeManager
customerName → customerAddr, customerPhone
customerName, petName →  petBreed, petSex
customerName,storeBranchName → petName 
petBreed → price

一个。这是1NF的关系吗?如果没有,为什么不呢?然后把它放在1NF。

湾这是2NF的关系吗?如果没有,为什么不呢?然后把它放在2NF。

℃。这是3NF的关系吗?如果没有,为什么不呢?然后把它放在3NF。

d。识别关系的主键(下划线)和外键(斜体)。

我现在的问题是如何确定这是什么形式? 我尝试解决方案。

一个。该表不在1NF中,因为每个值都不是原子值

1NF

PetStore(storeBranchName, storeAddr, storeManager,customerName, customerAddr, customerPhone,petName, petBreed, petSex, price )

****这里是我开始遇到问题的地方****

湾该关系不能在2NF,因为它不在1NF

2NF

store(storeBranchName, storeAddr, storeManager)
customer(customerName, customerAddr, customerPhone)
pet(petName,petbreed,petsex)

℃。?

3NF

store(storeBranchName, storeAddr, storeManager)
customer(customerName, customerAddr, customerPhone)
pet(petName, petBreed, petSex)
petCust(customerName,storeBranchName, petName)
petPrice(petBreed, price)

d。我真的很难确定主键在这里是什么,并且不太了解外键的密钥。如果有人能给我任何提示或线索,我真的更愿意不接受直接答案,除非通过纠正我可能做错的事情。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

作业结构不合理。问题a,b和c指的是“这种关系”,如果它被解释为指的是原始的给定关系,则b和c的答案将以“因为它不在1NF中”开头。如果b和c引用前一个问题的答案,那将是对学生理解的更好的测试。此外,问题d应适用于每一步。

我也质疑给定的FD customerName,storeBranchName → petName。它冒犯了常识(客户每个商店只能购买一只宠物),如果是这种情况,原始的嵌套关系就不需要嵌套(petName, petBreed, petSex, price)。也许它被添加到现有问题中使其复杂化。

你对a的回答是正确的,但我希望看到在原始关系中确定的集合,元组或关系值属性,或者提到传统的“重复组”。如上所述,我还希望看到每一步中确定的密钥。从给定的FD中,我们可以确定customerName,storeBranchName是1NF关系的候选关键字 - 通过导出这组属性的FD闭包来证明这一点。

对于问题b,通过证明部分依赖性来解释为什么你对问题a的答案不在2NF中。您的2NF关系不符合1NF答案的标准化。您应该有3个关系,分别由customerNamestoreBranchNamecustomerName,storeBranchName键入。

对于问题c,通过证明传递依赖性来解释为什么问题b的答案不在3NF中。你的3NF关系不是你的2NF答案,但他们接近正确的答案。正确的宠物关系是pet (customerName PK, petName PK, petBreed, petSex)

主键应该通过规范化过程来维护/派生,而不是事后“决定”。您只需要识别一次主键,对于1NF,其他人应该遵循规范化。

外键的概念在关系模型和旧网络模型中意味着不同的东西。在关系模型中,外键约束只是子集完整性约束,例如, petCust.customerName ⊆ customer.customerName。在网络模型中,它表示petCustcustomer记录之间的关系。我建议研究和比较两种模型。

希望这有帮助,随时在评论中提问。