我正在尝试找出在SQL表中存储具有详细信息的项目数组的最佳方法。 我有一个用户帐户数据库。用户有多个输入字段可输入多个详细信息,如:
___ : ______ +(get more multiple field field)
用户可以输入任何详细信息,如
Output1 : Output2
Mobile : 2455...
email : sdf
city : dfs
Other : sf
平均而言,用户将使用大约20个选项
由于我不知道字段(移动电话,电子邮件等),因此我必须将Output1
字段与答案字段(output2
)一起存储。
我将拥有一个非常庞大的用户群,所以我认为为每个用户创建单独的表并不是更好。
有没有办法存储和获取有限或单列的详细信息。
答案 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。其他字段是属性值。