我正在尝试创建一个基本的表单生成器。因此,用户可以在某种CMS系统中单击HTML表单。我仍在研究这方面的数据库设计,当涉及到复选框时,我有一个问题。
我的数据库设计如下:
字段
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值,因此我知道要呈现什么样的字段。
但这还不是全部。我还有一个表,表中的“值”是单选按钮之类的分组元素可以拥有的。
字段值:
fk_field_id | label | value
3 | Radio 1 | radio1
3 | Radio 2 | radio2
4 | Check 1 | check1
4 | Check 2 | check2现在,当我阅读表fields时,我可以JOIN表fieldvalues,这样我就知道哪些选项属于radio,哪些选项属于checkbox。这一切似乎都很顺利。
现在最棘手的是。生成表单时,我还需要一个位置来保存输入的值。因此,我的Form Engine会自动为此创建一个额外的表。它为field_name表中的每个fields创建一个列。因此,在本例中,动态创建的表如下所示:
myform
pk_form_id | text1 | text2 | radio1 | check1 | language_id现在,当用户将数据输入生成的HTML表单时,我可以轻松地保存所有输入的数据。因为textfield只需要一个列。分组单选按钮最终只提交一个值。但是,当选中两个或多个复选框时,一组复选框当然可以提交多个值。
现在我的问题是,如何将它保存到数据库中?我不认为将多个值存储在一个列中,并将其分隔为某个字符是一个好主意。因为这也增加了搜索的难度。
我最初认为这是一种很好的方法,因为我可以通过简单的myform查询轻松地从SELECT ... WHERE表中提取一行。
所以不管怎么说,我不确定这是不是个好的计划.以及如何处理复选框可以提交的多个值?
对此有什么想法吗?
发布于 2012-09-23 02:58:31
将值存储为XML/JSON将是可行的。根据关系数据库的不同,数据库可以本机处理XML和/或可以使用XPath查询文档。Drupal大量使用这种类型的存储,对它们来说很好。
发布于 2012-09-21 11:33:53
我认为你的问题是你没有想到支票控制的正确方式。您需要将每个单选按钮或复选框视为自己的控件。
单选按钮被组合在一起是影响其行为的单选按钮的一个方面。事实上,每个单选按钮都有一个值(checked=true,false)。您的控件值表应该包含每个单选按钮(和复选框)的条目,就像对每个文本框一样。
与其为选项按钮及其值保留子表,不如将此信息放在主控件表中,该表应展开以提供对这些控件进行分组的某种机制。您可以从control_group表中得到一个带有可选外键的fields表,也可以只是去denormalize,并且在fields表中有一个可选的group-name列。
https://stackoverflow.com/questions/12526947
复制相似问题