我想用 PHP 开发一个具有以下功能的应用程序
- 用户可以使用具有所需字段的表单设计器创建多个表单
- 每个表单提交都会存储在mysql中
- 用户可以稍后查看相应的表单提交
我已经完成了 UI 部分和表单设计器。
问题
我无法弄清楚如何设计用于接受表单提交的数据库,例如如果用户创建了一个包含以下字段的表单
- 姓名
- 电子邮件
- 城市
- 学科
- 询问
但是以后用户可以添加或删除字段而不会弄乱数据库设计。
请帮助我设计 MySQL 数据库,以便将表单存储到表中并在那里提交。
我想用 PHP 开发一个具有以下功能的应用程序
我已经完成了 UI 部分和表单设计器。
问题
我无法弄清楚如何设计用于接受表单提交的数据库,例如如果用户创建了一个包含以下字段的表单
但是以后用户可以添加或删除字段而不会弄乱数据库设计。
请帮助我设计 MySQL 数据库,以便将表单存储到表中并在那里提交。
像这样的东西:
CREATE TABLE forms (
form_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, -- the UID of this form
owner INT, -- the user who "owns" the form
PRIMARY KEY (form_id)
);
CREATE TABLE fields (
form_id BIGINT UNSIGNED NOT NULL,
field VARCHAR(10), -- the field name
PRIMARY KEY (form_id, field),
FOREIGN KEY (form_id) REFERENCES forms (form_id)
);
CREATE TABLE submissions (
submission_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
form_id BIGINT UNSIGNED NOT NULL,
field VARCHAR(10),
value BLOB, -- stores PHP's serialize($var)
PRIMARY KEY (submission_id),
FOREIGN KEY (form_id) REFERENCES forms (form_id),
FOREIGN KEY (form_id, field) REFERENCES fields (form_id, field)
);
我建议对表单设计的修改在数据库中创建一个新的(副本)表单,以免使基于旧设计的任何历史提交无效。