2010-01-27 47 views
1

我有三個表 -[MySQL]:有沒有更有效的方式來鏈接這些表格?

Transaction: 
ID TimeStamp 

Discount: 
Code Amount 

Transaction_Discount: 
ID  Code 

這幾乎爲基本,你可以得到。

有沒有更有效的方法將這些表連接在一起?

+2

它是一個還是一對多的關係? – HLGEM 2010-01-27 23:06:40

+0

誠實地不太確定究竟是什麼......但我相信這是多對多 – 2010-01-27 23:18:13

+0

是否可以有多個與單個「TRANSACTION」記錄關聯的「TRANSACTION_DISCOUNT」記錄?如果是 - 那是一對多的關係。如果不是,那麼這是一對一的關係,並且一對一關係沒有任何好處,因爲它與「TRANSACTIONS」表中的「CODE」列相同。 – 2010-01-27 23:24:09

回答

5

如果您正在建模一個交易可以有0個或更多的折扣和一個折扣可以應用到0個或更多的交易那麼這3個表的方法是標準的方式去。

我唯一要做的改變是給代碼字段以外的數字主鍵打折,並將其用作Transaction_Discount中的外鍵。

+0

+1偉大的建議,正是我會做的。 – David 2010-01-27 23:10:59

1

如果它是一對一的,那麼只需在您的交易表中添加一個折扣碼字段即可。

如果它是一對多的,那麼將一個交易ID添加到您的折扣表中。

如果它是多對多的話,那麼你擁有的三表解決方案是唯一的路線。

0

從您的評論中,這種關係是一對多的關係,其中一個折扣可以適用於很多交易

因此,應該按如下步驟進行建模你的表:

Transaction table: 
id, discount_id, timestamp 

Discount table: 
id, code, amount 

正如你可以看到有沒有必要爲第三鏈接表。如果這種關係是多對多的,這隻會是必要的。

您還可以看到,由於交易只有一個折扣,因此我們將折扣ID作爲外鍵存儲在交易表中。這樣,如果我們想要的話,我們可以有許多交易引用相同的折扣,但每筆交易只會引用一個折扣。

相關問題