我想计算模型对象的投票数。我想有两种方法可以做到这一点:
方法1
class Question(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
vote_count = models.IntegerField()
然后获取模型,更新计数,然后重新保存模型。
或者:
方法2
class Vote(models.Model):
user = models.ForeignKey(User,on_delete=models.CASCADE)
class Question(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
votes = models.ManyToManyField(Vote,related_name='questions')
通过这种方式,我可以添加投票,然后在需要摘要时依靠所有投票。
我想做大多数投票和其他求和操作的事情。
从数据库成本角度以及未来的可扩展性来看,哪种方法最有效?
答案 0 :(得分:0)
首先,您列出的两种方法并不完全相同 - 首先,您只保留有关总票数的信息,而在第二种方法中,您还会保留有关用户的信息。投票(并且您可能想要添加其他相关字段)。
显然,第一种方法效率更高,因为它不需要像第二种那样的连接,但我会在这里稍微粗心一点,并说你可能不必担心 - 不要忘记这里可能相关的what Mr. Knuth said:
我们应该忘记效率低,大约97%的时间说: 过早优化是万恶之源。但我们不应该通过 我们在关键的3%
中获得机会