数据库设计查询

时间:2010-01-07 02:56:55

标签: python database-design google-app-engine schema

我正在制作一个琐事网络应用程序,其中包含独立问题和5个以上的问题测验。我正在寻找设计这个模型的建议。

测验及其问题是否应存储在单独的表/对象中,并带有将它们绑在一起的键,或者我最好将测验创建为独立实体,并为每个问题的特征存储列表?或者也许有人有另一个想法......

提前谢谢你。这可能有助于说我使用的是Google App Engine,它通常会对关系数据库模型产生影响,但如果有意义的话,我愿意采用自己的路线。

5 个答案:

答案 0 :(得分:3)

没有更多信息很难说,但根据你所说的话,拥有以下关系是明智的:

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

这样问题可以出现在多个测验中。

答案 1 :(得分:1)

我的第一次剪辑(我认为这些问题是多项选择):

  • 我有一个问题表,其中ID_Question为PK,问题文本和类别(如果需要)。
  • 我有一个Answers表,其中ID_Answer为PK,QuestionID为FK,返回问题表,答案文本以及是否为正确答案的标志。
  • 我有一个测验表,ID_Quiz作为PK,测验说明和类别(如果你愿意)。
  • 我有一个QuizQuestions表,其中ID_QuizQuestion为PK,QuizID为FK,返回Quizzes表,QuestionID为FK,返回问题表。

这个模型可以让你:

  • 独立使用问题或在测验中使用
  • 让您可以根据需要在测验中提出尽可能多的问题
  • 让您尽可能多地选择问题(甚至是多个正确答案)
  • 在几个不同的测验中使用问题

答案 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。通过键快速查找,它允许将任何一个问题分配给任意数量的单个测验。