【发布时间】:2020-10-03 06:43:00
【问题描述】:
我正在练习数据库规范化,但有时我对引用感到困惑。我想先澄清一点:
- 嵌套结构是导师给的,不知道对不对也不知道怎么标注。
- 我得到了
SCAN模型,问题指定了SCAN里面的[PK],分别是storeId和productId。
这是问题陈述:
客户将他们的商品带到结账处并购买:我们将此记录为一次购买,包括不同产品的数量。我们必须记录在结账时扫描的每件商品,以及用于支付购买的方法。我们记录货物是在哪家商店购买的。我们不识别我们的客户。
SCAN (storeId, storeAddress, purchaseId, whenPurchased, paymentMethod, (productId, productName, quantityPurchased))
我可以看到 [PK] 及其与属性的关联,并得出如下:
Table1(storeId [PK], storeAddress)
Table2(purchaseId [PK], whenPurchased, paymentMethod, quantityPurchased)
Table3(productId [PK], productName)
但是,当我尝试引用外键时,我选择如下所示。原因是购买是围绕客户,即Table2。因此,当客户在商店购买产品时,我需要引用storeId 和productId 作为外键,如下所示:
Table1(storeId [PK], storeAddress)
Table2(purchaseId [PK], whenPurchased, paymentMethod, productId [FK], storeId [FK])
Table3(productId [PK], productName, quantityPurchased)
有时我对哪个表应该引用另一个表感到困惑。例如,有两个表:department 和emp。 emp 应该引用departmentId 作为外键,因为每个员工至少隶属于一个部门,但相反是错误的。如何确定两个实体之间的关系并正确引用?
【问题讨论】:
-
现在您只是要求我们使用定制教程重写您的教科书。请参阅How to Ask,点击谷歌搜索“stackexchange 作业”和投票箭头鼠标悬停文本。按照教科书的理由展示您的工作步骤,并在您遇到困难的第一个地方提出 1 个经过研究的特定非重复问题。引用您所依赖的定义、定理和算法。所有步骤也是常见问题解答。 PS 确定 FK 不是更高 NF 标准化的一部分。确定它们也在您的教科书和常见问题解答中。
-
我希望你能关注我的评论并编辑这篇文章。 PS当你给SCAN时你嵌套括号。那不是标准符号。--但你没有解释它。也许您的意思是 SCAN 不是关系。--但是,您没有解释它是什么。也许您的意思是 SCAN 是与属性与组件的关系。无论如何,productId 不是 SCAN 属性,因此它不能成为 SCAN PK 的一部分。同样无论如何,您最初是标准化为 1NF。但是"1NF" has no single meaning。因此,您需要告诉我们您的定义,最好还告诉我们教科书名称和版本。
-
不清楚你从什么开始,或者你想用它做什么,或者你第一次卡在哪里,或者你的第一个具体问题是什么。请确定输入是什么以及您要做什么并告诉我们。清楚地给出必要的东西。除非您说出它们的含义,否则不要发布嵌套括号。 (问你的教练。)除非你给出一个 NF,否则对更高 NF 的“规范化”并不意味着任何特定的东西。请对我所有的cmets采取行动。 PS“我可以简单地推导出下面的表格。”不是“按照教科书的理由展示你的工作步骤”。等等。
-
为什么您的帖子除了最后一句之外还包含其他内容,您的教科书对此有何评论,包括谷歌搜索在内的其他研究提供了什么? (包括“site:stackoverflow.com”。)何时声明 FK 是一个常见问题。
标签: sql database database-design foreign-keys database-normalization