首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP/MySQL中存储大量表单数据的最佳方式?

问在PHP/MySQL中存储大量表单数据的最佳方式?
EN

Stack Overflow用户
提问于 2011-12-07 23:29:18
回答 4查看 2.1K关注 0票数 2

我正在为一个客户做一个web应用程序,这是一个内部系统,让员工在开始之前填写大量表格。

当我收到表单时,有很多像25-30这样的表单,而我在弄清楚如何在MySQL数据库中存储每个表单的数据时遇到了麻烦。每个表单都有不同的数据要求和不同的选择。

最初,我考虑的是只有一个表,然后将选择序列化为一列,而不是拥有一百列。我以前从来没有做过如此大规模的事情,我想知道保存数据的最好方法是什么?

EN

回答 4

Stack Overflow用户

发布于 2011-12-07 23:33:41

您可以使用EAV商店,如下所示:

代码语言:javascript
复制
| form_name | employee_id | field_name | value |

它不是超级干净的,但它有点标准化了,你可以用一种合理的方式对它进行查询。如果遇到表太大的问题,即使有索引,也可以将EAV存储拆分为多个表,可以按form_name拆分。

票数 2
EN

Stack Overflow用户

发布于 2011-12-08 00:21:47

您可能需要至少三个表:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-12-08 00:42:01

如果您没有被MySQL所限制,您可以尝试使用MongoDB来完成此任务,因为它更适合于像这样的任务。如果你被锁定了,EAV可能就是你的选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8417871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档