gpt4 book ai didi

mysql - 没有两行不同的表具有相同的主键?

转载 作者:搜寻专家 更新时间:2023-10-30 21:50:17 24 4
gpt4 key购买 nike

我的一个表order 与另外两个表PaymentMethod1PaymentMethod2一对多 关系。我创建了单独的“付款方式”表,因为它们具有完全不同的属性,因此我可以避免空值。但是,order 中的特定行将链接到任何一个表的特定行——PaymentMethod1PaymentMethod2。这要求主键值在这两个表中都是唯一的,即 PaymentMethod1PaymentMethod2 中的两行不能具有相同的主键。

enter image description here

我以这种方式为 PaymentMethod1PaymentMethod2 选择主键是否正确?如果是,我该如何实现?

最佳答案

这是解决问题的一种限制方式。当您添加新的支付类型时会发生什么?一个新表出现,并且必须重写所有使用订单和付款类型的查询的 JOIN 条件。

如果您将来可能会添加更多支付类型,请考虑使用一个支付类型表来保存所有支付类型通用的支付类型和属性,然后再使用一个单独的属性表来保存基于付款类型的行中的属性。这样,当您扩大规模时,您会增加记录数,而不是对象数(表和字段)。

如果您保留现有的,您需要将订单号写入您的付款类型表以便您可以加入它们,或者您需要将付款类型类型以及付款类型主键写入订单表。像这样的东西:

Order Number | Payment Type Type | Payment Type Key
1 PaymentType1 5
2 PaymentType2 5
3 PaymentType1 5

然后:

SELECT 
o.Number,
COALESCE(pm1.key, pm2.key),
CASE WHEN o.PaymentTypeType = "PaymentType1"
THEN pm1.pm1_attr1
ELSE pm2.pm2.attr3
END as "Friendly Attribute Name"
FROM ORDER o
LEFT OUTER JOIN PaymentMethod1 pm1 ON
o.PaymentTypeType = "PaymentType1" AND
o.PaymentTypeKey = pm1.key
LEFT OUTER JOIN PaymentMethod2 pm2 ON
o.PaymentTypeType = "PaymentType2" AND
o.PaymentTypeKey = pm2.key

你可以看到它可能很快就会变得丑陋。尤其是当您在一年后将新的 PaymentType 添加到组合中时。

关于mysql - 没有两行不同的表具有相同的主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28879855/

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