Database design 为“设计一个数据库”;“表格引擎”;

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

我正在尝试创建一个基本表单生成器。因此,用户可以在某种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\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大量使用这种类型的存储,对他们来说效果很好

哇,就像你在数据库里创建一个数据库!哇,就像你在数据库里创建一个数据库!