1

我正在尝试创建一个基本的表单生成器。因此,用户可以在某种 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。所以在这种情况下,动态创建的表如下所示:

我的表格

pk_form_id | text1 | text2 | radio1 | check1 | language_id

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

现在我的问题是,我怎样才能将它保存到数据库中?我认为将多个值存储在一个列中并由某个字符分隔不是一个好主意。因为这也使得执行搜索变得困难。

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

所以无论如何,我不确定这是否是一个好的设置......我如何处理复选框可以提交的多个值?

有什么想法吗?

4

2 回答 2

1

将值存储为 XML/JSON 将是可行的方法。根据您的 RDBMS,数据库可以本地处理 XML 和/或您可以使用 XPath 查询文档。Drupal 大量使用了这种类型的存储,它对他们来说工作得很好。

于 2012-09-23T02:58:31.590 回答
0

我认为您的问题是您没有以正确的方式考虑检查控件。您需要将每个单选按钮或复选框视为自己的控件。

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

与其为选项按钮及其值保留一个子表,不如将此信息放在您的主控件表中,该表应该被扩展以提供一些对这些控件进行分组的机制。您可以有一个control_group带有可选外键的表,fields或者您可能只是非规范化并group-name在您的表上有一个可选列fields

于 2012-09-21T11:33:53.093 回答