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

问题描述 投票:-1回答:2

我正在创建一个调查应用程序,我不知道如何设计数据库。我需要有多个问题和多种问题的调查。我有三种方法可以想到:

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: [
         {...},
         {...},
         {...},
    ],
}

谢谢你的任何建议。

python sql django database django-models
2个回答
1
投票

抽象在设计数据库时非常重要,并且在某些情况下(例如来自端点的有效负载)可以将所有数据放在JSON字段中,但如果不是这样的话,则会以更加统一的方式存储数据的方式。以下是我将如何从高层开始设计调查应用程序。

1)首先,你应该在最顶层有一个调查表,这样你就可以创建多个调查实例(比如在不同的时间或不同的组),可以包含不同类型的问题。这还包含日期,结束时间,组等...

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

3)接下来,我将为您希望支持的每种类型的问题创建一个新表,该表继承自第二部分中的通用问题表,因此它们会自动获取外键和问题字段。

3.1)多选实例。为此,我还将创建一个多选答案表。这只是指定多选问题表的外键,然后是所述问题的可用选项的答案字段。这将允许您重复使用多项选择答案进行选择。

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

希望这有助于一些方向。快乐的编码!


0
投票

如果您询问数据库,请将其设为数据库。这意味着规范化的表存储您的所有数据。对此毫无疑问。

© www.soinside.com 2019 - 2024. All rights reserved.