gpt4 book ai didi

mysql - 使用哪种关系模型来存储依赖于其他值的值?

转载 作者:行者123 更新时间:2023-11-29 16:08:59 25 4
gpt4 key购买 nike

我接到的任务:

实现产品折扣功能,折扣金额取决于不同的条件,例如:

  1. 折扣金额取决于产品类别(手机、电视、PC);
  2. 折扣金额取决于产品制造商(Apple、Samsung、Sony);
  3. 折扣金额取决于客户类型(注册/访客);
  4. 等等

假设我们只需要满足第一个条件,即每个制造商的折扣金额 - 我认为这是一对一关系的纯粹示例,其中每个制造商定义了自己的折扣。

从数据库模式的角度来看,我们可以通过两种方式轻松实现这部分:

  1. 一张 MANUFACTURER_DISCOUNT 表,包含 2 列:MANUFACTURER_NAME(类型为 ENUM)和 DISCOUNT_AMOUNT(类型:LONG);
  2. 或者使用 2 个表 MANUFACTURER(MANUFACTURER_NAME、ID)和 DISCOUNT(DISCOUNT_AMOUNT、MANUFACTURER_ID);

但是,如果我只有超过 1 个条件(每个制造商的折扣),我该怎么办?

如何正确构建表的结构?

  • 我是否只需要使用 PRODUCT_CATECORY、CUSTOMER_TYPE 等其他列来扩展我在选项 1 中描述的表,或者是否存在更优雅、更正确的解决方案?

最佳答案

每个折扣都应该有自己的表。

那么折扣金额查询就变成这样:

SELECT IFNULL(cd.discount, 0) + IFNULL(md.discount, 0) + IFNULL(custd.discount, 0) as discount
FROM product p
LEFT JOIN category_discount cd
ON p.category = cd.category
LEFT JOIN manufacturer_discount md
ON p.manufacturer = md.manufacturer
LEFT JOIN customer_discount custd
ON p.customer_type = custd.customer_type

请注意,这里的 JOIN 比折扣的精确计算更重要,只需记住 NULL 是未找到的值,需要考虑在内。

保留表用于单一目的。放置多种折扣类型可能会变得困惑,因为您需要多行。具有一对一关系的多个表最终也会导致不必要的复杂化。

当对表结构有疑问时,开始在这些表上写出您需要的查询。此时,哪种表结构会导致简单查询通常会变得很明显。

关于mysql - 使用哪种关系模型来存储依赖于其他值的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55445748/

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