[英]MySQL database design, two types of records - use one table or two separate tables?
我正在構建一個具有兩種不同類型用戶的應用程序,讓我們分別調用一個User_type_a和另一個User_type_b 。 我想知道是否應該在數據庫中為兩種類型的用戶創建一個表,並具有一個屬性來區分每個記錄是哪種類型的用戶,或者是否應該為每種類型的用戶創建兩個單獨的表。
注意事項:1.所有用戶的99%將是User_type_a。2. User_type_b除了User_type_a還將需要其他屬性(例如信用卡號等)
哪種設計方法是最佳的? 還是不是很重要。
一張用戶表,假設用戶類型b是真實用戶。 創建另一個鏈接到用戶表的表,以存儲用戶類型B的抄送詳細信息。
這使您可以輕松進行所有主要的用戶更改(搜索用戶,更改用戶詳細信息,查找用戶以進行登錄等),但是其中不包含許多浪費的列。
請注意,如果要存儲信用卡號,則數據中心和體系結構必須符合PCI標准 ,這很昂貴。
如果類型B僅具有通用用戶類型的其他信息(列),則使用:
如果類型A和B具有一些公共列,並且每個都有一組不同的列,則使用
兩種情況都將所有公共列保留在User
表中-子類型表僅具有特定於每個列的列。 請注意, UserID
傳播到子類型表。
最好的方法是將所有用戶存儲在同一表中,並具有與第二個表相關的外鍵,該表包含額外的信息。
**USER TABLE**
NAME AGE TYPE FK
Grant 25 Adult 1
Susan 4 Child null
John 65 Adult 2
**EXTRA TABLE**
FK CREDITCARD OTHER
1 234234... blah
2 2334... blah
這樣可以節省空間。
因此,聽起來User_type_a和User_type_b的數據相同,不同的是User_type_b在User_type_a之上和之外都有其他數據(但User_type_a沒有這樣的唯一數據)。
鑒於此,我將創建一個存儲User_type_a數據(即兩種用戶類型的交集)的單個用戶表。 然后為其他User_type_b數據創建第二個表,並使用外鍵將該表鏈接回用戶。 (請注意,users表中沒有此列定義哪些用戶是哪種類型。)
如何分辨兩種用戶類型的區別? 簡單:User_type_b在第二個表中具有相關的行; User_type_a沒有。 這使得任何不關心差異的應用程序功能都可以輕松獲取每個人的通用用戶數據,而需要額外的User_type_b數據(或僅關心一種或另一種類型)的功能仍可以確定誰是什么類型並獲得額外的數據。
使用一張桌子。 他們都是用戶。 您的代碼將在這兩種類型之間有更一般的用法,因此您在與用戶打交道時將避免執行2個sql查詢(即使它們在99%的時間內都不相關)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.