我想创建一个基本的表单生成器。因此,用户可以在某种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
的值,所以我知道要渲染哪种字段。
但这并非全部。我还有一个表格,其中包含像“单选按钮”这样的元素的“值”。
fieldvalues:
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
自动创建一个额外的表。它为fields
表中的每个field_name
创建一个列。因此,在这种情况下,动态创建的表看起来像这样:
myForm的
pk_form_id | text1 | text2 | radio1 | check1 | language_id
现在,当用户输入数据时生成的HTML表单,我可以很容易地保存所有输入的数据。因为文本字段只需要一列。分组单选按钮最终只提交一个值。但是一组复选框当然可以在检查两个或多个复选框时提交多个值。
现在我的问题是,我该如何保存到数据库?我认为将多个值存储在一列中并不是一个好主意,并由一个特定字符分隔。因为这也使得难以执行搜索。
我最初认为这是一个好方法,因为我可以用简单的SELECT ... WHERE
查询轻松地从myform
表中拉出一行。
因此,无论如何,我不知道这是否是一个好的设置...以及如何处理复选框可以提交的多个值?
对此有何想法?
http://stackoverflow.com/a/5858666/1114171 –
哇,它就像你正在创建一个数据库,在数据库中! –