【问题标题】:Which database design to choose for a survey app?为调查应用程序选择哪种数据库设计?
【发布时间】:2019-07-06 15:55:26
【问题描述】:

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

感谢您的任何建议。

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: python sql django database django-models


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

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

    【讨论】:

    • 对您的第一个答案的详细回答投票赞成!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 2012-03-21
    • 2012-05-27
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多