有一个带有4个型号的models.py。 其标准记录是:
class Main(models.Model):
stuff = models.IntegerField()
class Second(models.Model):
nested = models.ForeignKey(Main)
stuff = models.IntegerField()
class Third(models.Model):
nested = models.ForeignKey(Second)
stuff = models.IntegerField()
class Last(models.Model):
nested = models.ForeignKey(Third)
stuff = models.IntegerField()
还有Last模型的另一种变体:
class Last(models.Model):
nested1 = models.ForeignKey(Main)
nested2 = models.ForeignKey(Second)
nested = models.ForeignKey(Third)
stuff = models.IntegerField()
这样可以节省一些数据库负载吗?
nested1和nested2中的信息将复制Secod和Third中的字段,甚至可能会过时(幸运的是,在我的情况下,因为数据不会被更改,所以只添加了new)。 但是从我的想法来看,它可能会节省数据库负载,当我查看某个主记录的所有最后记录时。或者当我只查找Main.id以获取特定的最后一项时。
我是对的吗?
它真的可以节省负载还是有更好的做法?
答案 0 :(得分:1)
这完全取决于您访问数据的方式。默认情况下,当您访问外键时,Django将再次调用数据库。因此,如果您希望减少对数据库的调用,可以使用select_related在外键中预取模型。