我们目前正在开发自己的电子商务解决方案,作为我们研究的一部分,我们一直在研究ZenCart数据库模式,并发现数据在各种表之间经常重复,而这些表似乎可能是外国人密钥足以链接两个或多个有问题的表,例如:
鉴于有“产品”表,其中包含以下列
PRODUCT_ID
PRODUCT_NAME
PRODUCT_PRICE
PRODUCT_SKU
然后,如果有一个Sales_Item“表”那么当然可以通过简单地执行以下操作来引用产品(及其所有组成列):
SALES_ITEM_ID
Products_PRODUCT_ID //这是将特定产品与销售商品相关联的外键。
SALE_TIME
REST_OF_SALE_SPECIFIC_DATA ......
然而,似乎Sales表复制了Products表中定义的许多字段值,因此它实际上如下所示:
SALES_ITEM_ID
PRODUCT_ID
PRODUCT_NAME
PRODUCT_PRICE
PRODUCT_SKU
SALE_TIME
我的问题是,在尝试构建可扩展的高效解决方案时,哪种方法通常被视为最佳做法。使用外键意味着数据不会重复,但需要注意的是,为了查询整个数据集,需要数据库或应用程序级JOINS。然而,不是说,出于某种原因,外键方法似乎更清洁,更正确。