【发布时间】:2022-01-23 12:58:41
【问题描述】:
我正在从事一个 DRF 项目,我对这两种选择之间的性能有疑问:
首先:在 Teacher 类中有一个 ManyToManyField。因此,要通过教师访问学生,我将访问“学生”字段。
class Student(models.Model):
... student data ...
class Teacher(models.Model):
students = models.ManyToManyField(Student)
第二个:我把老师作为Student类的ForeignKey。要检查老师的学生,我将使用 Student.objects.filter(teacher__id=id)
class Teacher(models.Model):
... teacher data ...
class Student(models.Model):
teacher = models.ForeignKey(Teacher, on_delete=models.SET_NULL)
总体而言哪个更好,尤其是对于 DB (PostgreSQL)。假设我有 100 万学生和 10 万教师。
注意:这只是我真正问题的一个例子。我的代码比这大得多我不想开始复制所有内容,因为我的问题只是关于性能。假设每个学生只能有一个老师,而一个老师可以有多个学生。
最好的
【问题讨论】:
-
哪种 SQL 表结构最能代表模型? Django 模型只是对此类的一些抽象。
-
也许考虑一下:如果一个学生有 4 门课程,由 3 位不同的老师教授(一位老师教授两门课程),会发生什么?如果课程在学期中途更换老师会怎样?
-
@user2864740 感谢您的回答。这只是我真正问题的一个例子。我的代码比这大得多,我不想开始复制所有内容。假设每个学生只能有一个老师,而一个老师可以有多个学生。 1 还是 2 哪个更好?最佳
-
如果一个学生“只能有一个老师,一个老师可以有多个学生”,那么只有一个模型准确地描述了规则——M个学生(FK) : 1 老师。 (每个 M:1 可以 被建模为一个有限制的 M:M,尽管这不是一个上帝的描述。)我怀疑这个 M:1 规则,以及由此产生的模型,很可能是一个整体设计有问题..
标签: postgresql django-models django-rest-framework