【发布时间】:2016-08-15 22:22:22
【问题描述】:
我正在尝试使用 android 创建一种测验,为此我将主题和问题存储在 sqlite 数据库中,现在我的问题是一个主题可以有多个问题,而一个问题可以适用于多个主题我将如何将其放入数据库任何帮助将不胜感激谢谢
【问题讨论】:
标签: android database sqlite database-design
我正在尝试使用 android 创建一种测验,为此我将主题和问题存储在 sqlite 数据库中,现在我的问题是一个主题可以有多个问题,而一个问题可以适用于多个主题我将如何将其放入数据库任何帮助将不胜感激谢谢
【问题讨论】:
标签: android database sqlite database-design
您需要一个包含问题和答案 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 相关
【讨论】:
使用第三范式 [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
【讨论】:
您将需要三个不同的表。一个用于您的主题,一个用于您的问题,一个用于存储问题和主题的 ID,因此可以将多个链接在一起。
就像你有主题:1:食物,2:汽车,3:动物。 问题:1:猫开什么样的车? 2:狗吃什么食物?
并将它们链接到第三个表格中:
topic_id | question_id
2 | 1
3 | 1
1 | 2
3 | 2
【讨论】: