我正在为客户端做一个网络应用程序,这是一个内部系统,让员工在开始之前填写大量表单。
当我收到表格时,有很多像25-30,我无法弄清楚如何在MySQL数据库中存储每个表格的数据。每个表单都有不同的数据和不同的选择。
最初我考虑使用单个表,然后将选择序列化为一列而不是一百列。我以前没有做过这么大的事情,想知道保存数据的最佳方法是什么?
答案 0 :(得分:2)
您可以使用EAV商店,例如:
| form_name | employee_id | field_name | value |
它不是超级干净但是有点标准化,你将能够以一种理智的方式对它进行查询。如果您遇到表太大的问题,即使使用索引,您也可以将EAV存储分成多个表,可能是form_name。
答案 1 :(得分:0)
您可能至少需要三个表格:
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
);
答案 2 :(得分:0)
如果您没有锁定MySQL,可以尝试使用MongoDB,因为它更适合像这样的任务。如果您被锁定,EAV可能就是您的选择。
答案 3 :(得分:-3)
如果您使用此数据来维护记录,则最好使用MS Excel。 或者您甚至可以尝试使用MS Access替代它。