【问题标题】:Should I normalise my database in this case? [closed]在这种情况下我应该标准化我的数据库吗? [关闭]
【发布时间】:2021-10-29 05:36:06
【问题描述】:

我在我的网站数据库中遇到了一个问题。我希望我在下面解释得足够好:

我的网站的想法是显示同一产品在不同商店的价格。例如,我的产品“shoesA”在 shopA、shopB 和 shopC 中销售。

鞋子A的价格如下:

shopA : 107$,
shopB : 114$,
shopC : 97$

我可以看到存储产品数据的两种主要方式:

1) 将有关单个产品的所有数据存储在单个表中的一行中。这将需要使用二维数组。

例子:

ID=48,
Name="shoesA",
Brand="brandA",

Prices="[["shopA" , 107] , [["shopB " , 114] , [["shopC " , 97]]",

2) 将这一切分成单独的表格。

例子:

table_product_info

ID=48,
Name="shoesA",
Brand="brandA"

table_product_prices_shopA

ID=4,
Product_ID=48,
Price=107

table_product_prices_shopB:

ID=4,
Product_ID=48,
Price=114

table_product_prices_shopC

ID=4,
Product_ID=48,
Price=97

为什么我认为 1 比 2 更快,因此更好:

要使用方法 1 获取 shoesA 的全部数据,我只需要执行 1 次查询。但是对于方法 2,它可能是 10 个查询。

非常感谢您花时间阅读本文并提供帮助!

【问题讨论】:

  • 产品表(ID、名称、品牌)。商店表(id,名称)。价格表(id、product_id、shop_id、价格)。
  • 你有第三种方法,有一个产品表、一个商店表和一个价格产品商店表,这可能是最好的选择

标签: mysql sql database database-design database-normalization


【解决方案1】:

两者都不完全正确。

您希望产品表列出产品详细信息。 那么您希望商店表列出商店详细信息。

那么最后你需要一个告诉哪个商店销售哪种产品,如下所示:

store_product
______________
store_id
product_id
begin_date
end_date
price

【讨论】:

  • 感谢您的想法。但是,您建议的规范化数据库是否会花费更长的时间从只有 1 个表的数据库中进行查询?或者这只是灵活性的问题? (对我来说重要的是 > 25%)再次感谢!
  • 不,这是数据库引擎擅长的。如果你尝试你的设计#1,你会做噩梦。
  • @AndreiMikhov - 速度取决于查询而不是模式。向我们展示查询;然后我们可以比较模式。同时,我喜欢 Randy 的方法,这与 Akina 和 nacho 建议的方法相似。
猜你喜欢
  • 1970-01-01
  • 2010-10-30
  • 2015-02-04
  • 1970-01-01
  • 2011-01-17
  • 2022-07-22
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
相关资源
最近更新 更多