【问题标题】:How do you store values with repeating values in a database如何在数据库中存储具有重复值的值
【发布时间】:2016-08-15 22:22:22
【问题描述】:

我正在尝试使用 android 创建一种测验,为此我将主题和问题存储在 sqlite 数据库中,现在我的问题是一个主题可以有多个问题,而一个问题可以适用于多个主题我将如何将其放入数据库任何帮助将不胜感激谢谢

【问题讨论】:

    标签: android database sqlite database-design


    【解决方案1】:

    您需要一个包含问题和答案 ID 的映射表,因此需要 3 个表。

    假设您有表格“问题”:

    Question 1 with Id 1
    Question 2 with Id 2
    Question 3 with Id 3
    

    另一个表“答案”:

    Answer 1 With Id 1
    Answer 2 with Id 2
    

    假设问题 1 可以有两个答案,您需要将它们与具有 2 列的表“QuestionsAnswers”相关联,一列保存问题的 ID,一列保存答案的 ID:

    CREATE TABLE [MyDatabase].[dbo].[QuestionsAnswers](
    [QuestionId] [int] NOT NULL,
    [AnswerId] [int] NOT NULL)
    

    让我们简化这个并建立 5 个关系:

    QuestionId | AnswerId 
    1          | 1
    2          | 1
    2          | 2
    3          | 2
    1          | 2
    

    答案 2 与问题 1、2 和 3 相关

    问题 2 与答案 1 和 2 相关

    【讨论】:

      【解决方案2】:

      使用第三范式 [see Wikipedia],您可以执行以下操作:

      您有 3 张桌子。您的 table_categories、table_questions 和第三个表,代表这两者之间的 m 对 n 关系。 这是通过简单地为每个 1 对 1 关系创建一行来实现的,如下所示。

      table_categories
      _______________________________________
      id       name
      
      1       "culture"
      2       "history"
      ...
      42      "animals"
      
      
      table_questions
      _______________________________________
      id       name
      
      1       "Which fo the following is not a member of the EU?"
      2       "When was the last FIFA world cup in Europe?"
      ...
      42      "Who was Jimmy Hendrix?"
      
      
      table_question_categories
      _______________________________________
      id      fk_id_question    fk_id_category
      
      1       4                 5
      2       4                 37
      ...
      42      42                5
      

      【讨论】:

        【解决方案3】:

        您将需要三个不同的表。一个用于您的主题,一个用于您的问题,一个用于存储问题和主题的 ID,因此可以将多个链接在一起。

        就像你有主题:1:食物,2:汽车,3:动物。 问题:1:猫开什么样的车? 2:狗吃什么食物?

        并将它们链接到第三个表格中:

        topic_id | question_id
        2        | 1
        3        | 1
        1        | 2
        3        | 2
        

        【讨论】:

          猜你喜欢
          • 2013-10-29
          • 2012-06-19
          • 1970-01-01
          • 2017-09-12
          • 1970-01-01
          • 1970-01-01
          • 2019-06-29
          • 2014-01-03
          • 2011-02-13
          相关资源
          最近更新 更多