我正在制作一个琐事网络应用程序,其中包含独立问题和5个以上的问题测验。我正在寻找设计这个模型的建议。
测验及其问题是否应存储在单独的表/对象中,并带有将它们绑在一起的键,或者我最好将测验创建为独立实体,并为每个问题的特征存储列表?或者也许有人有另一个想法......
提前谢谢你。这可能有助于说我使用的是Google App Engine,它通常会对关系数据库模型产生影响,但如果有意义的话,我愿意采用自己的路线。
答案 0 :(得分:3)
没有更多信息很难说,但根据你所说的话,拥有以下关系是明智的:
Quiz (id, title)
Question (id, question, answer)
QuizQuestion (quiz_id, question_id)
这样问题可以出现在多个测验中。
答案 1 :(得分:1)
我的第一次剪辑(我认为这些问题是多项选择):
这个模型可以让你:
答案 2 :(得分:1)
我最近完成了一个用于进行个性化测验的App Engine应用程序。
我会说超级简单的路线并将每个测验的所有内容存储在一个测验实体中。如果您不需要在测验之间重复使用问题,除了参加测验之外,不需要搜索或以任何其他方式访问测验的结构,您可以这样做:
class Quiz(db.Model):
data = db.TextProperty(default=None)
然后数据可以是JSON结构,如:
data = {
"title" : "Capitals quiz",
"questions" : [
{
"text" : "What is the capital of Finland?"
"options" : ["Stockholm, Helsinki, London"],
"correct" : 1
}
...
]
}
您希望索引的内容,您将不想使用此数据结构。例如,在我的应用程序中,我发现我需要将测验创建者的ID留在数据之外,这样我就可以对某个人创建的所有测验进行数据存储查询。此外,我在数据之外有创建日期,以便我可以查询最新的测验。
created = db.DateTimeProperty(auto_now_add=True)
您可能还有其他类似的字段。就像我说的,这是一种存储测验的一种非常简单的方法,无需为测验提供多个数据存储实体或查询。然而,它在我自己的个性测试应用程序中的实践中运行良好,并且是一种越来越流行的数据存储方式。
答案 3 :(得分:0)
有一个问题表,一个测验表和一个映射表。这将为您提供最大的灵活性。这很简单,您甚至不需要整个关系数据库管理系统。我认为人们往往会忘记关系是非常简单的数学/逻辑概念。 RDBMS只为你处理了很多乱七八糟的书。
答案 4 :(得分:0)
这是一个设计,它将解释Quizess和Questions之间的多对多关系。换句话说,测验可以有很多问题,一个问题可以属于许多测验。一个问题只有一个副本,因此可以对其进行更改,然后将反映在问题所属的每个测验中。
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
Quiz实体的questions属性包含分配给测验的每个Question实体的Key。通过键快速查找,它允许将任何一个问题分配给任意数量的单个测验。