gpt4 book ai didi

mysql - order_products 表应该非规范化吗?

转载 作者:行者123 更新时间:2023-11-29 14:41:17 27 4
gpt4 key购买 nike

order_products 表保存产品数据以及产品名称和价格。它有一个客户购买的记录列表。

还有两个名为 product_nameprice 的字段,它们是 products 表中的重复数据。

是否值得标准化 order_products 表并为产品名称和价格创建历史(审核)表?那么我就不再需要 order_products 表中的 product_nameprice 了?

最佳答案

我假设您需要在订购时存储产品名称价格。随着时间的推移,两者都会发生变化。如果这种情况发生很多,那么您当前的方法可能已经足够好了。

我会考虑采用标准化方法,特别是如果每​​个 (产品名称,价格)order_products 中有很多行。有一个额外的表来存储产品每次更改时的 volatile 状态。就像您已经暗示的那样,可以称为 product_history 。只需保存每个新状态的日期(或时间戳)即可。有一个指向表 product 的外键链接以保持引用完整性。像这样:

create table product_history
(product_id integer -- or timestamp
,valid_from date
,product_name varchar
,price decimal
,PRIMARY KEY (product_id, valid_from)
,FOREIGN KEY (product_id) REFERENCES product(product_id)
ON DELETE CASCADE
ON UPDATE CASCADE)

用于查找适用的 volatile 属性的快速查询:

SELECT *
FROM product_history
WHERE product_id = $my_product_id
AND valid_from <= $my_date
ORDER BY valid_from DESC
LIMIT 1;

您肯定需要一个(product_id, valid_from) 索引来加速此查询。我的示例中的主键可能就可以了。

关于mysql - order_products 表应该非规范化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7944510/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com