2013-10-18 49 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表中的值与客户端关联即可。如果它们的值没有设置(即没有行存在),那么您知道在表单中值可以被视为空,直到它们实际设置一个值。

相关问题