2010-11-04 73 views
1

對不起,如果這已經回答了某個地方,但我如何創建一個並不總是存在的外鍵。MySQL:外鍵

示例:我有一個名爲invoice_payments的表,其中包含INT列'type'和'cc_gateway'。我也有第二個表稱爲invoice_cc_gateway。由於我可以接受多種支付類型(現金,cc在線支付),我將支付類型存儲在類型中(0 =現金,1 = cc網關),並且當它是來自網關的支付時,我想鏈接到特定項目。

現在我的問題是,如果密鑰總是存在,我知道如何將兩個表連接在一起,但如果密鑰不總是存在,該怎麼辦。如果我們有現金支付,我將cc_gateway設置爲0,因爲它沒有關聯。

在過去,我只是在cc_gateway內創建了一個0的虛擬行,以便我的鍵始終匹配,但是必須有更正確的方法才能做到這一點。

在此先感謝

回答

1

改寫答案

對不起,我有點快之前,你當然可以在網關表引用通過網關支付的項目外鍵,但相反的不可能是真實的(即鏈接到網關表的項目表中的一個鍵)

如果密鑰不總是存在,它不能是一個外鍵約束(引用),但相反,你將不得不加入當該值存在時網關表。

select * from invoice_payments inv 
left join invoice_cc_gateway gw 
on inv.paymentId = gw.paymentId 
where paymentType = 1 
union 
select * from invoice_payments 
where paymentType = 0 
+0

嗯,我基本上只照顧,讓我的圖表反映了這兩者之間的聯繫,但如果我不應該指定什麼鍵明智的,我不會擔心。謝謝。 – 2010-11-04 10:06:14

+0

我更擔心,因此在一年中,如果我看看我的EER圖表,生成表格,它反映了我的關係。我知道如何做選擇。謝謝你,雖然 – 2010-11-04 10:07:32

+0

實際上,我發現http://stackoverflow.com/questions/762937/whats-the-difference-between-identifying-and-non-identifying-relationships它看起來是我想要的是一個非識別關係。再次感謝! – 2010-11-04 10:13:26