为调查应用程序选择哪种数据库设计?

时间:2019-02-12 22:28:31

标签: python sql django database django-models

我正在创建一个调查应用程序,但我不知道如何设计数据库。我需要包含多个问题和多种类型问题的调查。我可以想到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: [
         {...},
         {...},
         {...},
    ],
}

谢谢您的建议。

2 个答案:

答案 0 :(得分:1)

抽象在设计数据库时很重要,并且在某些情况下可以将所有数据放入JSON字段中(例如,来自端点的有效负载),但是如果不是这样,那么就有反抗的方式可以将数据大量存储更统一的时尚。下面是我如何从高层次开始设计调查应用程序的方法。

1)首先,您应该明确地在最顶层具有一个调查表,以便可以创建多个调查实例(例如在不同时间或针对不同的组),其中可以包含不同类型的问题。这还将包含日期,结束时间,组等...

2)然后在下一个级别中,我将创建一个通用问题表。这将包含调查的外键和要询问的问题的char字段。

3)接下来,我将为您要支持的每种类型的问题创建一个新表,该表从第二部分的通用问题表继承而来,以便它们自动获取外键和问题字符字段。

3.1)多项选择示例。在此基础上,我还将创建一个多选答案表。这仅具有用于指定多选题表的外键,然后具有针对所述问题的可用选项的答案字段。这样,您就可以重复使用多项选择答案以供选择。

4)最后,更多的是设置要进行的调查而不是调查的回答方,这是不将所有内容都放入JSON的另一个原因;)。为了回答问题,我将在顶层实现SurveyResponse表,然后对另一个表进行第一个表,该表对第1部分中所述调查中的每个问题都具有SurveyResponse的外键。

希望这有助于一些指导。编码愉快!

答案 1 :(得分:0)

如果您要查询数据库,则将其设为数据库。这意味着要存储所有数据的标准化表。毫无疑问。