数据库设计未知数量的输入

时间:2012-12-07 13:19:53

标签: mysql database

我正在尝试将一些数据存储在数据库中,但无法弄清楚数据库应该如何设计以实现最高生产率......

用户可以选择表单中的条目数。然后这些条目需要保存在数据库中。然而,不知道用户想要多少条目,例如它们可以是1或100.

如何保存此类数据更好?

我的想法是使用userID存储数据库中的条目数,并将输入放入数组中,将其序列化并将其存储在数据库中。

3 个答案:

答案 0 :(得分:1)

我可能会做以下事情:

+---------------+
| Table: users  |
+----+----------+
| id | username |
+----+----------+
|  1 | tanzeel  |
|  2 | john     |
+----+----------+

+-----------------------------------------------+
| Table: entries                                |
+----+---------+------------+-------------------+
| id | user_id | entry_name | single_entry_data |
+----+---------+------------+-------------------+
|  1 |       1 | prop1      | ################  |
|  2 |       1 | prop2      | ################  |
|  3 |       1 | prop3      | ################  |
|  4 |       2 | prop1      | ################  |
|  5 |       2 | prop2      | ################  |
|  6 |       1 | prop4      | ################  |
+----+---------+------------+-------------------+

entries表为与n关联的每个用户存储user_id个条目,这是对PK(主键)列id的FK(外键)引用表users。如果要检索数据,可以按如下方式触发选择查询以获取特定用户的条目。

SELECT * FROM entries A
INNER JOIN users B
ON A.user_id = B.id
AND B.id = 1;

答案 1 :(得分:1)

如果对于不同的输入字段类型有相同的选项,例如文本描述,则应使用这样的方法。

table       columns                  example values
-----       -------                  --------------
users       id, name, password       12, "Johnny", "afad13cf1941"
forms       id, user                 42, 12
inputs      id, form, type, options  6, 42, "checkbox", "Want newsletter?"

如果不同的输入字段有不同的选项,例如仅属于复选框的选中状态,请尝试以下操作。但在这种情况下,您必须为要提供的每种输入类型创建一个表,在此示例中为checkboxestextfieldsimages

table       columns                  example values
-----       -------                  --------------
users       id, name, password       12, "Johnny", "afad13cf1941"
forms       id, user                 42, 12
inputs      form, type, input        42, "checkbox", 8

checkboxes  id, text, checked        8, "Want newsletter?", false
textfields  id, text                 9, "Welcome to that page"
images      id, size, caption        10, 720, "The Mona Lisa"

type列告诉您使用哪个表格,您可以在input列的ID下找到输入字段的选项。

请注意,在这两个示例中,每个名为id的列都是主键。在最后一个表格中,typeinput的组合将成为主键。

答案 2 :(得分:1)

可能是nosql-database更适合您想要做的事情。 - 查看例如couchdb。

如果你想/必须使用mysql并且你需要能够搜索单个值,那就像Tanzeel一样并分享它。如果你想要做的是在给定用户/和/或表单id的情况下获取整个参数集,你应该最好将序列化数据存储为varchar或text字段。如果您选择序列化,请查看json是否适合您的账单。然后你有很多工具来处理你的数据。