2017-02-19 121 views
0

我對一對一的關係有些懷疑。在我的例子中,我有一家公司,公司有一個地址。 (數據類型是隨機的,只是舉例)一對一關係(1:1)

選項1:

Option 1

選項2:

Option 2

什麼是最好的選擇嗎?我知道,我可以把所有的數據放在同一個表中,但是有很多屬性。

+4

最好的選擇是滿足您的需求。根據我的經驗,一家公司可以同時擁有多個地址,並且可以隨時間推移。 –

+1

如果address_id將爲必需值,則選項1將要求您先創建地址。如果需要company_id,選項2將要求相反。或者如果添加約束條件等等 – davejal

+1

第三種選擇:使用列'(company_id,address_id)'和兩個列上的唯一約束的連接表。這樣你的公司和地址表可以保持不變,並通過第三張表格鏈接它們。唯一約束確保只有1:1關係。 – knittl

回答

1

我個人儘量避免創建一對一的關係。在你的例子中,你有一家公司與一個地址有關係。我只是簡單地將外鍵放在公司的桌子上,這將正式使它成爲一對多的關係(即使你永遠不會像那樣使用它)。所以,我首先會問你是否可以接受一個讓兩家公司擁有相同地址的模式。

如果不是,則一對一關係的可能解決方案是與主鍵共享相同的值。因此公司表中的ID 1000與地址表中的ID 1000匹配。很多像EF和Hibernate這樣的ORM工具都使用這種方法,沒有很好的原生SQL支持的方式,沒有遇到很多問題(級聯刪除提到一個)

0

我同意Fredrik Rudberg。除非另一個表代表一個獨立的實體(這是特定於問題域的),否則不建議將它們保存在一對一的關係表中。 您是否有地址表(如果已創建)有助於其他業務需求?如果不是,那麼對於公司實體(公司表)出現地址作爲屬性(列)是不是一個好主意?

0

我創建2分的情況下1-1的關係:

  • 的依賴表(在你的情況Address)可以與其他表進行連接。所以我把它作爲一個獨立的實體。
  • 抽象或特定用例。例如,總是我試圖將用戶&個人數據保存在2個獨立的表格中。

考慮到這一點,&而你的設計不會讓第一種情況發生(因爲它Company_id列),我將兩個表推入一個。不要擔心桌子的大小。這對你的情況並不是什麼大不了的。