为表单设计数据库模式

时间:2014-10-22 13:55:32

标签: database schema storage

我正在为包含复选框,MCQ,True / False的表单设计数据库模式。复选框字段最多可以为20.我设计了一个元数据表,其中包含数据,但我不认为它是最佳解决方案。


#METADATA

-ID

型(MCQ /复选框)

-Value_selected。


#CheckBoxes

-ID

-Question

-field1

-Field2

-field3

我对这部分如何有效地存储多个字段感到困惑。


#MCQ

-ID

-Question

-Field1。

-Field2


我希望你能解决问题。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如果您希望系统创建字段,那么您可能希望使用具有每个单独对象的表的完全规范化的数据库。例如。 form_table,form_fields_table,fields_table,fields_options_table,options_table。

这将允许您使用相同的结构来创建不同类型的多个字段并为它们动态分配选项(每个字段可以有多个选项/每个字段可以具有不同数量的选项)。然后,您可以将这些字段动态分配给各个表单。使用可以管理关系的框架比自己尝试自己做的更好。

如果系统不需要创建表单,那么您需要保存的只是表单响应,因此您应该为与DB结构分开的表单创建UI。 DB只需要将响应存储到字段响应中。

答案 1 :(得分:1)

我最近看到的一个解决方案是将Field1,Field2存储为文本字段中的单独字符串,例如:

# MCQ
ID: 1
Question: SomeQuestion
Responses: Field1|Field2|Field3

然后在答案表中,您将存储由|分隔的选定值。更好的解决方案是将响应存储为Json字符串,这样可以灵活地将值,文本和其他元数据绑定到每个响应。类似的东西:

{"Responses":[{"value":1,"text":"Field1"},{"value":2,"text":"Field2"}]

如果您想真正规范化数据库,您可以将响应作为单独的表。类似的东西:

#MCQ
MCQId: 1
Question: SomeQuestion

#MCQResponse
MCQId: 1
MCQResponseId: 1
Response: Field1

MCQId: 1
MCQResponseId: 2
Response: Field2