计算对象投票的最有效方法是什么?

时间:2018-01-30 23:05:51

标签: python mysql django oop entity-relationship

我想计算模型对象的投票数。我想有两种方法可以做到这一点:

方法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')

通过这种方式,我可以添加投票,然后在需要摘要时依靠所有投票。

我想做大多数投票和其他求和操作的事情。

从数据库成本角度以及未来的可扩展性来看,哪种方法最有效?

1 个答案:

答案 0 :(得分:0)

首先,您列出的两种方法并不完全相同 - 首先,您只保留有关总票数的信息,而在第二种方法中,您还会保留有关用户的信息。投票(并且您可能想要添加其他相关字段)。

显然,第一种方法效率更高,因为它不需要像第二种那样的连接,但我会在这里稍微粗心一点,并说你可能不必担心 - 不要忘记这里可能相关的what Mr. Knuth said

  

我们应该忘记效率低,大约97%的时间说:   过早优化是万恶之源。但我们不应该通过   我们在关键的3%

中获得机会