1

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

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

保存这些数据如何更好?

我想到的是用用户ID将条目数存储在数据库中,并将输入放入一个数组中,对其进行序列化并将其存储在数据库中。

4

3 回答 3

2

我可能会做以下事情:

+---------------+
| 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(主键)列的 FK(外键)引用。当您想要检索数据时,您可以按如下方式触发选择查询来获取特定用户的条目。idusers

SELECT * FROM entries A
INNER JOIN users B
ON A.user_id = B.id
AND B.id = 1;
于 2012-12-07T13:28:58.283 回答
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?"

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

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列告诉使用您将在哪个表中找到该列中 id 下的输入字段的选项input

请注意,在这两个示例中,调用id的每一列都是主键。在最后一个表中,type和的组合input将是主键。

于 2012-12-07T13:29:16.040 回答
1

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

如果您想/必须使用 mysql 并且您需要能够搜索单个值,请按照 Tanzeel 和 sharethis 进行操作。如果您想要获取给定用户 / 和 / 或表单 ID 的整组参数,则最好将序列化数据存储为 varchar 或文本字段。如果您选择序列化,请查看 json 是否符合您的要求。然后你有很多工具来处理你的数据。

于 2012-12-07T13:34:21.833 回答