0

我有一个拥有多个客户的平台,每个客户都有大量需要存储的人口统计数据。考虑到这一点,我似乎可以在 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 ......

按客户端(效率、安全性、可扩展性)或缺点拆分表有什么优点吗?其中哪一个是更好的方法?谢谢!

4

1 回答 1

2

您的第二个示例不是一个好主意(为每个人口统计创建一个表格)。相反,我会使用更“规范化”的东西,其中包含客户端表中的唯一可识别信息,然后是附加元数据(人口统计数据)作为查找:

Table: Clients

ClientId | FirstName | LastName | Email
-------------------------------------------------
1        | John      | Smith    | jsmith@email.com

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

于 2013-10-18T16:21:27.533 回答