[MySQL]:是否有更“有效”的方式来链接这些表?

时间:2010-01-27 23:04:18

标签: mysql database-design

我有三张桌子 -

Transaction:
ID    TimeStamp

Discount:
Code   Amount

Transaction_Discount:
ID      Code

它几乎和你能得到的一样基本。

是否有更“有效”的方式将这些表链接在一起?

3 个答案:

答案 0 :(得分:5)

如果您正在建模一个交易可以有0个或更多折扣,折扣可以应用于0个或更多交易那么这个3表方法是标准的方法。

我要做的唯一改变是在代码字段之外给折扣一个数字主键,并将其用作Transaction_Discount中的外键。

答案 1 :(得分:1)

如果是一对一,那么只需在交易表中添加折扣代码字段。

如果是一对多,则在您的折扣表中添加一个交易ID。

如果它是多对多,那么你拥有的三个表解决方案是唯一的路径。

答案 2 :(得分:0)

根据您的评论,这种关系是一对多的,其中一个折扣可以应用于许多交易

因此,您应该按如下方式对表进行建模:

Transaction table:
id, discount_id, timestamp

Discount table:
id, code, amount

如您所见,不需要第3个链接表。只有在关系是多对多的情况下才需要这样做。

您还可以看到,由于交易只有一个折扣,我们将折扣ID作为外键存储在交易表中。这样我们可以根据需要让许多交易引用相同的折扣,但每笔交易只会引用一个折扣。