【问题标题】:Database design under DjangoDjango下的数据库设计
【发布时间】:2013-01-03 21:49:13
【问题描述】:

我可能有一个非常基本的问题:我目前正在为我的课程中的学生及其分数建立一个数据库。我的 models.py 目前有两个主要类:学生(包含他们的姓名、身份证、电子邮件地址等)和课程(包含身份证、运行年份和评估信息 - 例如“论文”“40% ““演示文稿”“10%”“考试”“50%”)。当然,Student 有一个 ManyToMany 字段,这样我就可以将学生分配给课程,反之亦然。我必须能够添加和修改这些东西。

现在,很明显,我希望能够为不同作业的学生添加分数(因课程而异)。由于我在数据库编程方面非常缺乏经验,我希望你们中的一个可以给我一个提示,如何在我的模型中进行设置。

谢谢, 托比

【问题讨论】:

  • 向我们展示您的模型。到目前为止,您尝试了什么?问题是什么?

标签: django database-design


【解决方案1】:

也许解决方法是有一个单独的班级来分配,就像这样。

class Assignment(models.Model):
    ASSIGNMENT_TYPES = (
        ('essay', "Essay"),
        ...
    )
    ASSIGNMENT_GRADES = (
        ('a+', "A+"),
        ('a', "A"),
        ...
    )
    student = models.ForeignKey("Student")
    course = models.ForeignKey("Course")
    assignment_type = models.CharField(choices=ASSIGNMENT_TYPES, max_length=15, default='essay')
    progress = models.IntegerField()
    grade = models.CharField(choices=ASSIGNMENT_GRADES, max_length=3, default="a+")

这样,您就可以将一项作业与一位学生和一门课程相关联。如果每个作业有多个学生,则可以通过添加另一个类(例如 StudentGroup)并将其包含在模型中来相对容易地进行修改。

希望这会有所帮助:)

【讨论】:

    【解决方案2】:

    创建一个名为“Assessments”的模型,它有一个指向 Course 的外键。此外,创建一个名为“Assessment Type”的字段,另一个名为“Assessment Result”,最后一个名为“Assesment Date”。应该是这样的:

    ASSESSMENTS = (('E','Essay'),('P','Presentation'))
    
    class Assessment(models.MOdel):
        course = models.ForeignKey('Course')
        assessment = models.CharField(choices=ASESSMENTS)
        result = models.CharField(max_length=250)
        taken_on = models.DateField()
        overall_result = models.BooleanField()
        is_complete = models.BooleanField()
    

    每次有考试时,您都会在此表中为参加的每项评估填写一条记录。您可以使用总体结果作为标志来查看学生是否通过或失败,并使用 is_complete 来查看是否有任何课程等待考试。

    【讨论】:

    • 我如何添加参加评估的学生?使用另一个外键?
    • 是的,没错。所以现在你明白了。
    【解决方案3】:

    你应该看看classcommmodels.py文件, 一个用 Django 编写的内容管理系统,用于在 Web 上交付和管理课程。

    它有以下型号

    1. 部门
    2. 课程
    3. 讲师
    4. 导师
    5. 注册
    6. 作业
    7. DueDateOverride
    8. 提交
    9. 等级
    10. 额外信用
    11. 信息
    12. 资源
    13. 公告

    你的情况可能不需要如此复杂的关系,但它是models design

    您可以在此项目的homepage 上找到更多详细信息。

    【讨论】:

      猜你喜欢
      • 2018-01-31
      • 2021-07-21
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 2011-11-23
      • 2011-03-07
      相关资源
      最近更新 更多