Database design 为“设计一个数据库”;“表格引擎”;
我正在尝试创建一个基本表单生成器。因此,用户可以在某种CMS系统中单击HTML表单。我仍在研究这个数据库的设计,当涉及到复选框时,我有一个问题 我的数据库设计如下所示: 字段Database design 为“设计一个数据库”;“表格引擎”;,database-design,Database Design,我正在尝试创建一个基本表单生成器。因此,用户可以在某种CMS系统中单击HTML表单。我仍在研究这个数据库的设计,当涉及到复选框时,我有一个问题 我的数据库设计如下所示: 字段 pk_field_id | field_type | field_name | default_value 1 | textfield | text1 | Some default value 2 | textfield | text2 | NUL
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\u type
值,这样我就知道要渲染哪种字段
但这还不是全部。我还有一个带有“值”的表,这些值是分组元素(如单选按钮)可以有的
字段值:
fk_field_id | label | value
3 | Radio 1 | radio1
3 | Radio 2 | radio2
4 | Check 1 | check1
4 | Check 2 | check2
因此,现在当我阅读表格字段
时,我可以加入表格字段值
,这样我就知道哪些选项属于收音机
,哪些选项属于复选框
。这一切似乎都运作良好
现在是棘手的部分。生成表单时,我还需要一个位置来保存输入的值。
因此,我的表单引擎
会自动为此创建一个额外的表。它为字段
表中的每个字段名
创建一列。因此,在本例中,动态创建的表如下所示:
myform
pk_form_id | text1 | text2 | radio1 | check1 | language_id
现在,当用户在生成的HTML表单中输入数据时,我可以轻松地保存所有输入的数据。因为textfield只需要一列。分组单选按钮最终只提交一个值。但是,当选中两个或多个复选框时,一组复选框当然可以提交多个值
现在我的问题是,如何将其保存到数据库中?我认为在一列中存储多个值并用某个字符分隔不是一个好主意。因为这也使得在上执行搜索变得困难
我最初认为这是一个好方法,因为我可以通过一个简单的选择从myform
表中轻松地提取一行。。。其中
query
所以不管怎样,我不确定这是否是一个好的设置。。。如何处理复选框可以提交的多个值
对此有什么想法吗?我认为你的问题在于你没有正确考虑支票控制。您需要将每个单选按钮或复选框视为自己的控件
单选按钮组合在一起的事实是影响其行为的单选按钮的一个方面。每个单选按钮实际上都有一个值(选中=真,假)。控件值表应该包含每个单选按钮(和复选框)的条目,就像它包含每个文本框一样
与保留选项按钮及其值的子表不同,此信息应位于主控件表中,主控件表应展开,以提供对这些控件进行分组的机制。你可以有一个控制组
表,其中包含来自字段
的可选外键,或者你可以在字段
表上反规范化并有一个可选的组名
列。我认为你的问题是你没有正确考虑检查控制。您需要将每个单选按钮或复选框视为自己的控件
单选按钮组合在一起的事实是影响其行为的单选按钮的一个方面。每个单选按钮实际上都有一个值(选中=真,假)。控件值表应该包含每个单选按钮(和复选框)的条目,就像它包含每个文本框一样
与保留选项按钮及其值的子表不同,此信息应位于主控件表中,主控件表应展开,以提供对这些控件进行分组的机制。您可以有一个控制组
表,其中包含来自字段
的可选外键,或者您可以在字段
表中反规范化并有一个可选的组名
列。将值存储为XML/JSON将是一种可行的方法。根据您的RDBMS,db可以本机处理XML和/或使用XPath查询文档。Drupal大量使用这种类型的存储,对他们来说效果很好 将这些值存储为XML/JSON将是一种可行的方法。根据您的RDBMS,db可以本机处理XML和/或使用XPath查询文档。Drupal大量使用这种类型的存储,对他们来说效果很好 哇,就像你在数据库里创建一个数据库!哇,就像你在数据库里创建一个数据库!