2013-10-18 87 views
0

我有一個擁有多個客戶端的平臺,每個客戶端都有一組需要存儲的人口統計信息。考慮到這一點,似乎我可以在MySQL中做兩件事情之一。要麼:MySQL在多個表中存儲人口統計信息

選項#1:有一張大桌子,每個人的人口統計資料。例如:

Table: clientDemographics 

id | clientID | firstName .... 
1 |  34  | John ...... 
2 |  12  | Fred ...... 

選項#2:每個客戶端打出具有自己的表:

Table: client34_demographics 

id | firstName .... 
1 | John ...... 

Table: client12_demographics 

id | firstName .... 
1 | Fred ...... 

是否有任何優勢,以分裂表脫離由客戶端(效率,安全性,可擴展性)還是缺點?哪一個會是更好的方法?謝謝!

+0

爲什麼要讓每個客戶擁有自己的餐桌? –

回答

2

你的第二個例子不是一個好主意(爲每個人口統計創建一張表)。相反,我會去的,包含作爲查找在客戶表中是唯一可識別的信息,然後其他元數據(人口)更多的東西「標準化」:

Table: Clients 

ClientId | FirstName | LastName | Email 
------------------------------------------------- 
1  | John  | Smith | [email protected] 

Table: Demographics 

DemographicId | Name 
------------------------------------------------- 
1    | Gender 
2    | Nationality 
3    | Age 

Table: Clients_Demographics 

CDId | ClientId | DemographicId | Value 
------------------------------------------------- 
1 | 1  | 1    | Male 
2 | 1  | 2    | American 
3 | 1  | 3    | 27 

通過這種方式,您可以輕鬆地對人口統計類型,人口統計數據,客戶端等進行排序,並且可以節省數據庫空間,提高查詢性能並保持數據可擴展性。我的意思是可擴展性,需要添加另一個人口統計數據?只需在Demographics表中添加另一行,然後將Clients_Demographics表中的值與客戶端關聯即可。如果它們的值沒有設置(即沒有行存在),那麼您知道在表單中值可以被視爲空,直到它們實際設置一個值。

相關問題