簡體   English   中英

SQL一對多關系,但是多對一表關系

[英]SQL one to many relationship, but many to one table relationship

我有5個表可以包含一個電話字段,但是我想為每個表選擇多個電話號碼。

與其創建5個子表,不如創建一個子表並將其鏈接到其他5個“父”表,這更有意義。 但是現在我正在考慮如何將該表鏈接到其他5個表。

我的第一個想法是過濾2個主題。 一個字段,用於存儲鏈接表的名稱以及包含五個表之一中的鍵的通用外鍵。 我還是這樣。

接下來是將5個外鍵放入表中並使它們為空的想法。 我都不喜歡4個空字段的想法。 更不用說我對另一個表有相同的問題,該表將以類似的方式鏈接到其他11個表。

第三個是鏈接表或連接表,再次(我相信)具有5個可為空的外鍵,但這似乎比選項2做得更多,但復雜度更高。

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

第5個選項是我遇到的一個問題,其中將自動遞增字段與表名稱結合在一起以創建新的字符字段。 (僅在創建表期間,從技術上講,這不是計算字段。)但是,再次看到,除了第一個選項之外,它沒有帶來任何好處。

這些方法是最好的方法之一,還是我錯過了或者不理解的另一種選擇?

如果要將同一電話號碼分配給三個記錄(形成5個表),是否要將三個具有相同電話號碼的記錄添加到“ phone_numbers”表中?

這是一個優化問題,因此在SQL語義學上沒有“好的方法”。

在我看來,最容易在開發中使用的是第一種方法:此表中的table_nameid ,但不要使用varchar。 使用枚舉或“ table_name_id” TINYINT(引用第二個表的名稱)。

當您可以輕松完成此操作時,請不要使其變得如此復雜。您可以使用單個表來執行此操作。 我在下面給你一個例子:

用戶名| 電話號碼| 電話類型| ParentId

其中UserId:是用戶的ID;電話號碼:原始電話/手機號碼; PhoneType:電話/手機號碼;父ID:是主關鍵點;默認情況下,它是0,將其視為一個單獨的條目;否則,使用同一表的UserID進行標識。作為一個孩子的電話號碼。.把它當作樹狀關系船..據我所知,這是一種簡單而有效的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM