动态表单的数据库设计

时间:2016-03-18 14:29:41

标签: mysql database-design

我想创建一个部分动态的表单。多个字段将保存到training_session表中,标记将保存到tags表格中,并通过training_tags连接到培训会话。但是,除了这些必须是动态的字段之外。如果你看这张照片,你会明白这个想法:

enter image description here

但是,我努力为这些动态字段设计数据库。我想出了类似的东西:

field_types

 id - self explanatory
 type - holds the value int or string

字段

id - same
id_field_type - which type of value does the field hold?
label - could also be "name", I guess. Just to know, which field it actually is
value - the actual value of the field

这类问题的最佳做法和解决方案是什么?

2 个答案:

答案 0 :(得分:1)

由于您标记了MySQL,因此您似乎正在寻找关系数据库设计。关系数据库为normalized以消除数据重复。

查看表单,我们可以创建7个数据库表;培训课程,标签,培训课程标签,潜水,培训课程潜水,设备和培训课程设备。你已经提出了两个表。通常,表名是单数。

因此,让我们看一下如何定义训练课程表。

Training Session
----------------
Training Session ID
Training Session Title
Training Session Description
Training Session Time Stamp
Training Session Duration

Training Session ID是一个自动递增的整数或长整数,也是表的主键或聚类键。其余的属性应该是不言自明的。

我们将看到的下一个表格是Tag。

Tag
---
Tag ID
Tag Name
Tag Description
...

与Training Session表一样,Tag ID是此表的主键。标签表为每个可以应用于培训会话的可能标记保留一行。

现在,我们有培训课程,我们有标签。下一步是将培训课程与适当的标签相关联。为此,我们将创建一个联结表,训练会话标记。

Training Session Tag
--------------------
Training Session ID
Tag ID
...

此表的主键是Training Session ID和Tag ID的组合。这为您提供了特定培训课程的标签。如果您想要特定标签的培训课程,则需要额外的唯一索引(标签ID,培训课程ID)。

我认为您可以从这里找出潜水和装备表,以及训练课程潜水和训练课程设备联结表。

答案 1 :(得分:0)

您可以为此应用程序设置sql和nosql。主要结构使用SQL关系数据库,nosql用于变量和动态数据