我正在练习数据库规范化,但有时会对引用感到困惑。我想先澄清一下:
嵌套结构是由讲师给出的,我不知道它是否正确,也不知道应该如何表示。
我拿到钱了 SCAN
模型,问题指定了 SCAN
,它们是 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
作为外键是因为每个员工至少隶属于一个部门,反之则是错误的。如何正确确定两个实体和引用之间的关系?
1条答案
按热度按时间hvvq6cgz1#
我已经想出了这个问题的解释。规范化基于主键。因此,对于这个问题,形式应该是这样导出的:
假设有一位顾客购买了一种产品。每个采购记录都被记录为收据。因此,对于指定哪个产品在哪个商店。我们需要参考
storeId
以及productId
在收据上。因此,标准化形式将是:这个
quantityPurchased
应该和你在一起Product
因为每个产品都有其独特的productId
,但可以有相同的productName
. 例如,一部iphone11手机可能iphone 11 128GB black
作为一个productName
,但每个iphone 11 128GB black
会有不同的productId
. 如果我想数数iphone 11 128GB black
都卖了,我可以按这个分组productName
以及count(productName)
找到quantityPurchased
.