我正在为一个客户做一个web应用程序,这是一个内部系统,让员工在开始之前填写大量表格。
当我收到表单时,有很多像25-30这样的表单,而我在弄清楚如何在MySQL数据库中存储每个表单的数据时遇到了麻烦。每个表单都有不同的数据要求和不同的选择。
最初,我考虑的是只有一个表,然后将选择序列化为一列,而不是拥有一百列。我以前从来没有做过如此大规模的事情,我想知道保存数据的最好方法是什么?
发布于 2011-12-07 23:33:41
您可以使用EAV商店,如下所示:
| form_name | employee_id | field_name | value |它不是超级干净的,但它有点标准化了,你可以用一种合理的方式对它进行查询。如果遇到表太大的问题,即使有索引,也可以将EAV存储拆分为多个表,可以按form_name拆分。
发布于 2011-12-08 00:21:47
您可能需要至少三个表:
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
);发布于 2011-12-08 00:42:01
如果您没有被MySQL所限制,您可以尝试使用MongoDB来完成此任务,因为它更适合于像这样的任务。如果你被锁定了,EAV可能就是你的选择。
https://stackoverflow.com/questions/8417871
复制相似问题