创建数据库表的最佳方法是针对不同用户使用不同的列

时间:2016-07-17 11:57:54

标签: php mysql database

我正在尝试为申请表创建一个数据库表,其中包含70-80个字段,即70-80个表列。

此表适用于多个客户,但在80个字段中,每个用户的近30个字段相同,剩下的将是每个用户的更改。

注意:每个客户都会有多个用户填写该申请表。

我虽然以两种方式创建表格。

第一个:

第一个表包含相同的字段[sno, firstname, lastname, ..] - >适用于所有用户 第二个表包含4列[sno, field_name, value, users_id]

第二个:

第一个表将包含所有列而不管用户(这意味着我将在一个表中添加所有客户端列) 在第二个表中,我将维护user_id和与之关联的各列。

哪种方式最好,如果还有其他最佳方式,请告诉我。

所有客户的公共字段: 个人信息,家庭信息,教育细节等

还有一些其他细节会与每个客户不同

1 个答案:

答案 0 :(得分:0)

处理此类设计的最佳方法是使用EAV概念。

EAV:实体属性值

你需要制作几张桌子:

users (id, create_date, status)

attributes(id, title, status) // it will contains all attributes like firstname, lastname, etc etc)

attribute_to_users (id, attribute_id, user_id, attribute_value) // it will contain attribute value with respect to attribute and user 

例如:

attribute_to_users (1, 1, 1, Naveed)
attribute_to_users (1, 2, 1, Ramzan)

对于同一个用户,attributeId:1(firstname)值为Naveed,第二个attributeId为姓氏值为Ramzan

同样的Drupal和magento在做。