我正在尝试将一些数据存储在数据库中,但无法弄清楚应如何设计数据库以实现最大生产力...
用户可以选择表单中的条目数。然后需要将这些条目保存在数据库中。然而,不知道用户想要多少个条目,例如它们可以是 1 或 100。
保存这些数据如何更好?
我想到的是用用户ID将条目数存储在数据库中,并将输入放入一个数组中,对其进行序列化并将其存储在数据库中。
我可能会做以下事情:
+---------------+
| 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(外键)引用。当您想要检索数据时,您可以按如下方式触发选择查询来获取特定用户的条目。id
users
SELECT * FROM entries A
INNER JOIN users B
ON A.user_id = B.id
AND B.id = 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
将是主键。
nosql-database 可能更适合您想要做的事情。- 查找例如 couchdb。
如果您想/必须使用 mysql 并且您需要能够搜索单个值,请按照 Tanzeel 和 sharethis 进行操作。如果您想要获取给定用户 / 和 / 或表单 ID 的整组参数,则最好将序列化数据存储为 varchar 或文本字段。如果您选择序列化,请查看 json 是否符合您的要求。然后你有很多工具来处理你的数据。