数据库设计咨询

1 投票
5 回答
672 浏览
提问于 2025-04-15 17:43

我正在制作一个问答网页应用,里面会有独立的问题和5个以上问题的测验。我想请教一下关于如何设计这个模型的建议。

我应该把测验和它的问题存放在不同的表格或对象里,用一个关键字把它们联系起来,还是说把测验作为一个独立的实体来创建,每个问题的特征用列表来存储更好呢?或者也许有人有其他的想法……

提前谢谢大家。顺便说一下,我正在使用Google App Engine,这个平台通常不太支持关系型数据库模型,但如果有道理的话,我愿意走自己的路。

5 个回答

1

这是我初步的想法(我假设问题是选择题):

  • 我会建立一个“问题”表,里面有问题的ID(作为主键),问题的内容,还有一个类别(如果需要的话)。
  • 我会建立一个“答案”表,里面有答案的ID(作为主键),问题的ID(作为外键,指向“问题”表),答案的内容,还有一个标记,表示这个答案是否正确。
  • 我会建立一个“测验”表,里面有测验的ID(作为主键),测验的描述,还有一个类别(如果需要的话)。
  • 我会建立一个“测验问题”表,里面有测验问题的ID(作为主键),测验的ID(作为外键,指向“测验”表),还有问题的ID(作为外键,指向“问题”表)。

这个模型可以让你:

  • 单独使用问题,或者在测验中使用问题
  • 在测验中随意添加问题,数量可以多也可以少
  • 为问题提供任意数量的选择(甚至可以有多个正确答案)
  • 在多个不同的测验中使用同样的问题
3

没有更多信息的话,很难给出确切的答案,不过根据你说的内容,下面这些关系是比较合理的:

Quiz (id, title)
Question (id, question, answer)
QuizQuestion (quiz_id, question_id)

这样的话,问题就可以出现在多个测验中。

0

这里有一个设计方案,可以处理测验(Quiz)和问题(Question)之间的多对多关系。简单来说,一个测验可以有很多问题,而一个问题也可以属于多个测验。每个问题只有一份,所以对问题的任何修改都会在它所属的每个测验中反映出来。

class Quiz(db.Model):
    # Data specific to your Quiz: number, name, times shown, etc
    questions = db.ListProperty(db.Key)

class Questions(db.Model):
    question = db.StringProperty()
    choices = db.StringListProperty() # List of possible anwsers
    correct = db.IntegerpProperty() # index of string in choices that is correct

测验实体的 questions 属性保存了每个分配给该测验的问题的关键字。通过关键字查找非常快速,这样就可以将同一个问题分配给任意数量的测验。

撰写回答