0

我正在编写网站来评级书籍,但我不确定如何为登录用户实施投票系统。用户应该能够从 1-10 对图书进行评分,当然,系统应该记住他的投票,计算所有投票并计算平均评分。

可以说我有以下模型:

class Book(models.Model):
    title = models.CharField(max_length=30)
    author = models.ForeignField(Author)
    #... other fields

class User(models.Model):
   first_name = models.CharField(max_length=50)
   last_name = models.CharField(max_length=30)
   #... other fields

现在我可以将 rate 和 rates_count 字段添加到 Book,但我需要记住用户的投票。显然我需要 Book 类中的 ManyToMany 字段,我认为这样的事情应该没问题:

class Vote(models.Model):
   user_who_voted = models.ForeignField(User)
   rated_book = models.ForeignField(Book)
   rate_date = models.DateField()
   rate = models.ForeignField(User)

class Book(models.Model):
    title = models.CharField(max_length=30)
    author = models.ForeignField(Author)
    votes = models.ManyToManyField(through='Vote')
    #... other fields

我想知道在 Book 课中我是否需要 rate 和 rates_count。因为我可以从 Vote 模型中计算它们的值。对我来说,这里有几个未知数:

比方说,PostgreSQL 数据库引擎的快/慢速度如何计算所选书籍的平均率,(添加和计算所有投票投票 [平均率 = 所有添加的投票/投票数]) 10000 票,以及如何计算 1000000 票。操作时间是否保持不变?如果我的 PC 比服务器慢 1000 倍,那么计算所需的时间也是线性的吗?

对不起,如果我的问题很愚蠢,但我在数据库编程方面没有经验。谢谢你的任何答案。

4

1 回答 1

1

不是 ORM 和 Django 方面的专家,但大多数 SQL 数据库都有可以很快计算的总数。如果您有评级的数字字段,那么数学将非常简单快捷,并且最多可以在两个 DB SQL 调用中完成(您也需要计算记录数)。检查 django ORM 是否有总计(我相信有),否则(我确信 django orm 也提供直接 SQL)您可能需要制作自定义 SQL 查询来计算费率。此类查询将过滤所需的书籍 ID。

扩大算法规模并非易事。我想你也许应该把这个问题分开,一个关于模型,另一个关于性能,一旦你有了一些模型(也许还有替代模型)

于 2012-09-13T20:44:02.943 回答