簡體   English   中英

數據庫設計未知數量的輸入

[英]Database Design for Unknown number of inputs

我試圖將一些數據存儲在數據庫中,但無法弄清楚如何設計數據庫以實現最高生產率......

用戶可以選擇表單中的條目數。 然后這些條目需要保存在數據庫中。 然而,不知道用戶想要多少條目,例如它們可以是1或100。

如何保存這些數據更好?

我的想法是使用userID存儲數據庫中的條目數,並將輸入放入數組,序列化並將其存儲在數據庫中。

我可能會做以下事情:

+---------------+
| 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表存儲與user_id相關聯的每個用戶的n個條目, user_id是對表users的PK(主鍵)列id的FK(外鍵)引用。 如果要檢索數據,可以按如下方式觸發選擇查詢以獲取特定用戶的條目。

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?"

如果不同的輸入字段有不同的選項,例如僅屬於復選框的選中狀態,請嘗試以下操作。 但在這種情況下,您必須為要提供的每種輸入類型創建一個表,在此示例中, 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的組合將是主鍵。

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

如果你想/必須使用mysql並且你需要能夠搜索單個值,那就像Tanzeel一樣並分享它。 如果你想要做的是在給定用戶/和/或表單id的情況下獲取整個參數集,你應該最好將序列化數據存儲為varchar或text字段。 如果您選擇序列化,請查看json是否適合您的賬單。 然后你有很多工具來處理你的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM