在这种情况下我应该标准化我的数据库吗? [关闭]

Posted

技术标签:

【中文标题】在这种情况下我应该标准化我的数据库吗? [关闭]【英文标题】: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、价格)。 你有第三种方法,有一个产品表、一个商店表和一个价格产品商店表,这可能是最好的选择 【参考方案1】:

两者都不完全正确。

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

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

store_product
______________
store_id
product_id
begin_date
end_date
price

【讨论】:

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

以上是关于在这种情况下我应该标准化我的数据库吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在这种情况下我应该使用左连接吗?

在这种情况下我应该使用导航控制器吗?

在这种情况下我应该使用啥正确的数据类型?

在这种情况下我应该使用 delete 还是 delete[] ? [复制]

Angular 指令:在这种情况下我应该使用结构还是属性?

关于递归,Java 中的 for 循环。在这种情况下我的理解正确吗?