首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为“表单引擎”设计数据库

为“表单引擎”设计数据库
EN

Stack Overflow用户
提问于 2012-09-21 08:34:20
回答 2查看 331关注 0票数 1

我正在尝试创建一个基本的表单生成器。因此,用户可以在某种CMS系统中单击HTML表单。我仍在研究这方面的数据库设计,当涉及到复选框时,我有一个问题。

我的数据库设计如下:

字段

代码语言:javascript
复制
pk_field_id | field_type | field_name   | default_value
1           | textfield  | text1        | Some default value
2           | textfield  | text2        | NULL
3           | radio      | radio1       | NULL
4           | checkbox   | check1       | NULL

所以基本上这就是我保存所选字段的方式。当我读取这个表时,我可以遍历一个switch语句并读取field_type值,因此我知道要呈现什么样的字段。

但这还不是全部。我还有一个表,表中的“值”是单选按钮之类的分组元素可以拥有的。

字段值:

代码语言:javascript
复制
fk_field_id | label    | value
3           | Radio 1  | radio1
3           | Radio 2  | radio2
4           | Check 1  | check1
4           | Check 2  | check2

现在,当我阅读表fields时,我可以JOINfieldvalues,这样我就知道哪些选项属于radio,哪些选项属于checkbox。这一切似乎都很顺利。

现在最棘手的是。生成表单时,我还需要一个位置来保存输入的值。因此,我的Form Engine会自动为此创建一个额外的表。它为field_name表中的每个fields创建一个列。因此,在本例中,动态创建的表如下所示:

myform

代码语言:javascript
复制
pk_form_id | text1 | text2 | radio1 | check1 | language_id

现在,当用户将数据输入生成的HTML表单时,我可以轻松地保存所有输入的数据。因为textfield只需要一个列。分组单选按钮最终只提交一个值。但是,当选中两个或多个复选框时,一组复选框当然可以提交多个值。

现在我的问题是,如何将它保存到数据库中?我不认为将多个值存储在一个列中,并将其分隔为某个字符是一个好主意。因为这也增加了搜索的难度。

我最初认为这是一种很好的方法,因为我可以通过简单的myform查询轻松地从SELECT ... WHERE表中提取一行。

所以不管怎么说,我不确定这是不是个好的计划.以及如何处理复选框可以提交的多个值?

对此有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2012-09-23 02:58:31

将值存储为XML/JSON将是可行的。根据关系数据库的不同,数据库可以本机处理XML和/或可以使用XPath查询文档。Drupal大量使用这种类型的存储,对它们来说很好。

票数 1
EN

Stack Overflow用户

发布于 2012-09-21 11:33:53

我认为你的问题是你没有想到支票控制的正确方式。您需要将每个单选按钮或复选框视为自己的控件。

单选按钮被组合在一起是影响其行为的单选按钮的一个方面。事实上,每个单选按钮都有一个值(checked=true,false)。您的控件值表应该包含每个单选按钮(和复选框)的条目,就像对每个文本框一样。

与其为选项按钮及其值保留子表,不如将此信息放在主控件表中,该表应展开以提供对这些控件进行分组的某种机制。您可以从control_group表中得到一个带有可选外键的fields表,也可以只是去denormalize,并且在fields表中有一个可选的group-name列。

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

https://stackoverflow.com/questions/12526947

复制
相关文章

相似问题

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