最好的方法是在SQL表中存储包含详细信息的项目数组

时间:2013-12-15 21:21:42

标签: php mysql sql database database-design

我正在尝试找出在SQL表中存储具有详细信息的项目数组的最佳方法。 我有一个用户帐户数据库。用户有多个输入字段可输入多个详细信息,如:

___ : ______ +(get more multiple field field)

用户可以输入任何详细信息,如

Output1 : Output2
Mobile : 2455...
email : sdf
city : dfs
Other : sf

平均而言,用户将使用大约20个选项

由于我不知道字段(移动电话,电子邮件等),因此我必须将Output1字段与答案字段(output2)一起存储。

我将拥有一个非常庞大的用户群,所以我认为为每个用户创建单独的表并不是更好。

有没有办法存储和获取有限或单列的详细信息。

2 个答案:

答案 0 :(得分:3)

由于属性名称和值都来自用户,因此保存多对多关系的典型3表模型有点矫枉过正。

我只是将用户及其属性保存在两个单独的表中:

+---------+-----------+--------------+
| user_id | user_name | user_email   |
+---------+-----------+--------------+
| 1001    | John      | john@doe.com |
+---------+-----------+--------------+
| 1002    | Tim       | tim@doe.com  |
+---------+-----------+--------------+

+----------+-----------+--------------+--------------+
| field_id | user_id   | field_name   | field_value  |
+----------+-----------+--------------+--------------+  
| 1        | 1001      | Option1      | Option2      |
+----------+-----------+--------------+--------------+
| 2        | 1001      | Mobile       | 2345656565   |
+----------+-----------+--------------+--------------+
| 3        | 1001      | city         | dfs          |
+----------+-----------+--------------+--------------+
| 4        | 1002      | Other        | something    |
+----------+-----------+--------------+--------------+

可能还有一些额外的列用于排序,标记等。

答案 1 :(得分:1)

我会使用3张桌子。

表1 - 用户。 PK是UserId。其他字段是姓名,职级,序列号等

表2 - 属性 - 主键是AttributeId。其他字段是属性名称。属性名称的示例是emailAddress,cellphoneNumber,cityName。

表3 - UserAttribute。主键是UserId和AttributeId。其他字段是属性值。