tl; dr:需要在一个第二个表中存储一个表的id数组,但我能找到的都是混乱的解决方案。
我设计的测验系统有以下数据库表(基于对this问题的最佳答案):
Quizzes
-quiz_name TEXT PRIMARY KEY NOT NULL
Questions
-id INTEGER PRIMARY KEY AUTOINCREMENT
-quiz_name TEXT REFERENCES Quizzes(quiz_name)
-prompt TEXT NOT NULL
-difficulty TEXT NOT NULL
Answers
-id INTEGER PRIMARY KEY AUTOINCREMENT
-quiz_name TEXT REFERENCES Quizzes(quiz_name)
-prompt TEXT NOT NULL
-value INTEGER NOT NULL
Quiz_Results
-id INTEGER PRIMARY KEY AUTOINCREMENT
-quiz_name TEXT REFERENCES Quizzes(quiz_name)
-num_correct INTEGER NOT NULL
-time TEXT NOT NULL
我想要一个看起来像这样的表Question_Order:
Question_Order
-quiz_name TEXT REFERENCES Quizzes(quiz_name)
-???some way of storing the IDs of all questions for this quiz
我的第一直觉是将ID转换为逗号分隔的字符串并将其推送到Question_Order中,但这似乎是一个破解良好的RDBMS实践的黑客攻击解决方案。 This问题和this有人询问是否存储了ID列表。但是将问题放在一个单独的表中(而不仅仅是在测验表中将它们全部放在一起)的重点是它们可以重复使用,因此我无法添加一个"命令"列问题。我还可以为每个测验创建一个新表格(例如" First_Quiz_Order")但这也非常混乱。 如果重要的话,我会使用SQLite。
答案 0 :(得分:2)
如果您希望在不同的测验中重复使用问题,则quiz_name
表中不应包含questions
字段。
您可以通过从quiz_name
删除questions
并创建表quiz_question
而不是 question_order
来解决该问题以及排序问题:
- quiz_name REFERENCES quizzes
- question_id REFERENCES questions
- question_order INT
这使您可以在测验中分享问题,并为问题建立(每个测验的唯一测验)顺序。