2012-08-29 84 views
2

我們有一個包含employees,companiesaddresses表的MySQL數據庫。 安裝程序如下所示:員工和公司各有一個編號。由於他們在兩個不同的表中,員工可以有id = 1,公司可以有id = 1。兩者都可以有多個地址。MySQL外鍵連接到兩個表的常量?

現在的地址表有它鏈接或者一個公司或一個員工兩列:

element_id 
element_type_id 

element_type_id是1 =人或2 =公司

整個事情是有點更復雜,還有更多的表格,但有點解釋這個概念。 現在的問題是,我們想要開始使用實體框架,爲此我們需要定義與外鍵的關係。
但是,這聽起來幾乎不可能與我們現有的設置,是嗎? 由於地址表需要與個人和公司有些結合......

任何想法?

+0

你可以改變數據庫模式嗎? –

+0

理論上我們可以。但正如我所說,這比這更復雜一點。這種方法已經在db中廣泛使用,它在很多情況下都非常方便。例如,我們有任務。這項任務可能適用於公司,員工,工作,訂單或交易。它與我們可以添加到需要任務的每個元素完全相同的WebForm控件。 – Remy

回答

0

這個概念被稱爲多態關聯。我曾經問過一個question這個問題,因爲我有一個類似的數據結構,我想讓它更合理。在這個問題上,您的Address與評論表和EmployeeCompany與Person等相對應。

答案非常好。如果你可以改變模式,我一定會去做並使用這種方法。

如果您無法更改架構,則可以在EF模型中對Address類進行子類型劃分,並使用element_type_id作爲鑑別器列。您將創建子類型EmployeeAddressCompanyAddress,其中Employee指的是前者,Company指向後者。但是,「整個事情有點複雜」,我不確定這是否可行。

0

你已經提到你自己這個概念不適合關係數據庫。這沒有錯,MySQL和其他所有人都不支持它。而且它不是一個標準化的佈局,所以它可能被數據庫工程師認爲是不好的做法。

您應該考慮通過創建兩個附加表來分隔地址與關係:employee_adresses和company_addresses,每個表都與公司和地址或員工和地址有關係。這樣你可能會得到一個用於公司和許多員工的地址,這可能是一件好事(規範化結構)。