2011-04-06 73 views
0

我正在構建一個具有兩種不同類型用戶的應用程序,我們可以調用一個User_type_a和另一個User_type_b。我想知道是否應該在我的數據庫中爲兩種類型的用戶創建一個表,並且有一個屬性可以區分每個記錄的類型,或者我應該爲每種類型的用戶創建兩個單獨的表。MySQL數據庫設計,兩種類型的記錄 - 使用一個表還是兩個單獨的表?

注意事項:所有用戶的 1. 99%將是User_type_a 2. User_type_b將要求除User_type_a特性(如信用卡#的,等等)

哪種設計方法是最佳的?或者它並不重要。

+0

使用IsA關係,您可以創建具有常規數據的表用戶a表user_a和最終表user_b – Dalen 2011-04-06 22:09:42

回答

1

做到這將是最好的方式做2個sql查詢將所有用戶存儲在同一個表中,並且擁有與第二個表相關的外鍵,該表包含額外的信息。

**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 

這對空間效率更高。

2

一個表的用戶,假設用戶類型b是真正的用戶。創建鏈接到用戶表的另一個表,以存儲用戶類型B的CC詳細信息。

這使您可以輕鬆地執行所有主要用戶更改(搜索用戶,更改用戶詳細信息,查找用戶登錄等),但不包含許多浪費的列。

請注意,如果你是存儲信用卡號碼,您的數據中心和建築將不得不PCI compliant,這是昂貴的。

0

使用一個表。他們都是用戶。您的代碼將有兩種類型之間應用較爲普遍,所以你會避免與用戶打交道時(即使它們是不相關的99%的時間)

1

因此,聽起來像User_type_a和User_type_b在數據方面都是相同的,只是User_type_b具有超出User_type_a的額外數據(但是User_type_a沒有像這樣的任何唯一數據)。

鑑於此,我會創建一個存儲User_type_a數據(即,兩個用戶類型的交叉點)的單個用戶表。然後爲額外的User_type_b數據創建第二個表,並使用外鍵將該表連接到用戶。 (請注意,沒有列在這裏的用戶表定義哪些用戶屬於哪個類型。)

如何分辨兩種用戶類型之間的區別?簡單:User_type_b在第二個表中有相關​​的行; User_type_a不。這使得任何不關心差異的應用程序函數都可以輕鬆地爲每個人獲取普通用戶數據,而需要額外User_type_b數據(或者只關心一種類型或另一種類型)的函數仍然可以確定誰是什麼類型,並獲得額外的數據。

2

如果類型僅具有附加信息(列)到一般的用戶類型,然後使用: enter image description here

如果類型有一些共同的列和一組不同的列的每一個,然後使用 enter image description here

我這兩種情況下保留在User表中的所有常見列 - 子類型表只有專門針對每個列。請注意0​​傳播到子類型表。