2011-12-07 61 views
2

我正在爲客戶做一個網絡應用程序,這是一個讓員工在開始之前填寫大量表單的內部系統。在PHP/MySQL中存儲大量表單數據的最佳方法?

當我收到表格時,有很多這樣的表格,比如25-30,而且我很難弄清楚如何在MySQL數據庫中存儲每個表格的數據。每個表格都有不同的數據和不同的選擇。

最初我在考慮製作一個表格,然後將選擇序列化到列中而不是一百列。我之前沒有做過這麼大的事情,想知道保存數據的最好方法是什麼?

+0

是否必須是MySQL?你可以使用NoSQL數據庫,比如MongoDB,它是無模式的... http://blog.mongodb.org/post/119945109/why-schemaless – Flukey

+0

就在一個標準的Linux主機上,我正在用Codeigniter做 - 而不是相信我將有權限來安裝MongoDB的 – benpalmer

+0

啊,這是一個恥辱:-)將使你的生活輕鬆了許多:-) – Flukey

回答

-3

如果您使用這些數據來保存記錄,那麼使用MS Excel更好。 甚至你可以嘗試使用MS Access作爲替代方案。

+6

請從來不推薦MS Access或MS Excel作爲與PHP或web開發一般操作的數據庫解決方案。 – Flukey

+3

是的!謝謝:) –

+3

這比我想象的要容易得多。我以爲我不得不進入爲什麼你不應該推薦它的長篇大論。嘿嘿。好! :-) – Flukey

2

您可以使用EAV店,是這樣的:

| form_name | employee_id | field_name | value | 

這不是超級乾淨,但它是還挺標準化,你將能夠以健全的方式就可以查詢。如果遇到表太大的問題,即使使用索引,也可以通過form_name將EAV存儲拆分爲多個表。

0

你可能至少需要3個表:

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 
); 
0

如果你沒有鎖定在MySQL中,你可以嘗試用MongoDB中這樣做,因爲它更適合於像這樣的任務。如果你被鎖定,EAV可能是要走的路。

相關問題