簡體   English   中英

在PHP / MySQL中存儲大量表單數據的最佳方法?

[英]Best way to store large amounts of form data in PHP/MySQL?

我正在為客戶開發一個Web應用程序,這是一個內部系統,可讓員工在開始工作之前先填寫大量表格。

當我收到表格時,有很多表格,例如25-30,而我在弄清楚如何將每個表格的數據存儲在MySQL數據庫中時遇到了麻煩。 每個表格都有不同的數據要求和不同的選擇。

最初,我考慮使用一個表,然后將選擇序列化為一列,而不是一百列。 我之前沒有做過這么大的事情,並且想知道保存數據的最佳方法是什么?

您可以使用EAV商店,例如:

| form_name | employee_id | field_name | value |

這是不是超級干凈,但它有點標准化,你將能夠以健全的方式就可以查詢。 如果遇到表太大(即使有索引)的問題,則可以將EAV存儲拆分為多個表,可能是通過form_name。

您可能至少需要三個表:

CREATE TABLE form_fields (
 id INT NOT NULL AUTO_INCREMENT,
 form_name VARCHAR(50),
 field_name VARCHAR(20),
 PRIMARY KEY  (`id`),
 UNIQUE KEY `real_pk` (`formname`,`fieldname`)
);

CREATE TABLE forms_completed (
 id INT NOT NULL AUTO_INCREMENT,
 form_name VARCHAR(20),
 ... other info about this instance of the form, 
         e.g. submitted date, submitted by...
 PRIMARY KEY  (`id`),
 FOREIGN KEY (form_name) REFERENCES form_fields(form_name)
                  ON DELETE CASCADE
);

CREATE TABLE form_values (
 id INT NOT NULL AUTO_INCREMENT,
 form_instance IN NOT NULL,
 form_name VARCHAR(50), /* only required to force referential integrity */
 field_name VARCHAR(20),
 date_value DATETIME,
 int_value INT,
 float_value FLOAT,
 string_value VARCHAR(100),
 PRIMARY KEY  (`id`),
 FOREIGN KEY (form_instance) REFERENCES forms_completed(id)
                  ON DELETE CASCADE,
 FOREIGN KEY (form_name, field_name) 
      REFERENCES form_fields(form_name, field_name)
                  ON DELETE CASCADE
);

如果您未鎖定MySQL,則可以嘗試使用MongoDB進行此操作,因為它更適合此類任務。 如果您被鎖定,那么EAV可能是您的最佳選擇。

如果您使用此數據來維護記錄,則最好使用MS Excel。 甚至您也可以嘗試使用MS Access替代它。

暫無
暫無

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

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