2015-10-03 322 views
0

我有5個表可以包含電話字段,但我想要爲每個表的多個電話號碼的選項。SQL一對多關係,但多對一表關係

而不是創建5個子表,更有意義的是創建一個,並將其鏈接到其他5個「父」表。但現在我正在考慮如何將該錶鏈接到其他5.

我的第一個想法是過濾2個主題。一個存儲鏈接表名稱的字段,以及一個包含來自五個表之一的鍵的通用外鍵。我仍然傾向於這種方式。

接下來是將5個外鍵放到表中,並允許它們爲空的想法。我不喜歡4個空字段的想法。更不用說我有與另一個表以相似的方式鏈接到另外11個表的問題。

第三個是連接或連接表,再次(我相信)5個空的外鍵,但是這似乎並沒有做任何事情,更多的則選擇2多一點的複雜性。

第四個選項,我爲大多數表的主鍵使用自動增量字段。我可以切換到這些表的UUID或GUID。我已經設置爲使用UUID作爲主要安全原因,但是對大多數表使用自動增量來提高性能。

第5個選項是我碰到了在那裏的自動遞增字段用表名相結合,創建一個新的字符字段。 (僅在創建表時,技術上不是一個計算的字段。)但是再次看不到超出第一個選項的好處。

就是其中之一,以最好的方式,還是有另一種選擇我要麼錯過了,還是不明白嗎?

+0

嗯,最重要的是你完全避免了在表格中放置逗號分隔值的想法。 :) – Guffa

回答

0

如果你想分配相同的電話號碼三個記錄(形成你的5張桌子)是否要添加三個記錄具有相同的電話號碼到您的「phone_numbers」表?

這是一個優化問題,所以在SQL語義意義上沒有「好方法」。

在我看來最簡單的在發展中採用的是第一種方式:TABLE_NAMEID此表,但不使用VARCHAR。使用枚舉或「table_name_id」TINYINT(參考名字第二個表)。

0

不要讓它太複雜,而你可以做到這一點很容易 爲此,您可以使用單個表。我給你一個例子如下:

UserId |電話號碼| PhoneType |的ParentId

其中userid:是用戶 電話的ID號是原始的電話/手機號碼 PHONETYPE:電話/手機號碼 父ID:這裏主要的關鍵點默認爲0把它當作一個單獨的條目其他明智的相同tabl的用戶ID將其標識爲子電話號碼..將其視爲樹關係船.. 就我所知,這是一種簡單而有效的方法。