我正在创建一个调查应用程序,但我不知道如何设计数据库。我需要包含多个问题和多种类型问题的调查。我可以想到3种方式:
a)为调查和每种类型的问题创建一个数据库表,并将它们与Survey_id列联系起来。
b)创建用于问题和调查的数据库表,并将其存储在JSON之类的文本字段中。这些“文本”字段可能看起来像这样:
{
question: 'Who is the best student?'
type: 'multiple-choices',
choices: [
'Bob',
'Alice',
'Alex',
],
}
c)最后一个选择是创建一个仅用于调查的数据库表,并将其以JSON之类的格式存储。像这样:
{
heading: 'My survey'
date: '2019-01-01',
questions: [
{...},
{...},
{...},
],
}
谢谢您的建议。
答案 0 :(得分:1)
抽象在设计数据库时很重要,并且在某些情况下可以将所有数据放入JSON字段中(例如,来自端点的有效负载),但是如果不是这样,那么就有反抗的方式可以将数据大量存储更统一的时尚。下面是我如何从高层次开始设计调查应用程序的方法。
1)首先,您应该明确地在最顶层具有一个调查表,以便可以创建多个调查实例(例如在不同时间或针对不同的组),其中可以包含不同类型的问题。这还将包含日期,结束时间,组等...
2)然后在下一个级别中,我将创建一个通用问题表。这将包含调查的外键和要询问的问题的char字段。
3)接下来,我将为您要支持的每种类型的问题创建一个新表,该表从第二部分的通用问题表继承而来,以便它们自动获取外键和问题字符字段。
3.1)多项选择示例。在此基础上,我还将创建一个多选答案表。这仅具有用于指定多选题表的外键,然后具有针对所述问题的可用选项的答案字段。这样,您就可以重复使用多项选择答案以供选择。
4)最后,更多的是设置要进行的调查而不是调查的回答方,这是不将所有内容都放入JSON的另一个原因;)。为了回答问题,我将在顶层实现SurveyResponse表,然后对另一个表进行第一个表,该表对第1部分中所述调查中的每个问题都具有SurveyResponse的外键。
希望这有助于一些指导。编码愉快!
答案 1 :(得分:0)
如果您要查询数据库,则将其设为数据库。这意味着要存储所有数据的标准化表。毫无疑问。