我写的网站评级书籍,我不确定如何实现投票系统的登录用户。用户应该能够从1-10评分书,当然,系统应该记住他的投票,计数所有的投票和计算平均率。在
假设我有以下模型:
class Book(models.Model):
title = models.CharField(max_length=30)
author = models.ForeignField(Author)
#... other fields
以及
^{pr2}$现在我可以将rate和rates\u count字段添加到Book中,但我需要记住用户的投票。很明显,我在书本课上需要很多领域,我觉得这样应该可以:
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
我想知道我是否需要书本课的费率和费率。因为我可以从投票模型中计算出他们的价值。对我来说,有几个未知数:
数据库引擎(比如PostgreSQL)计算所选书籍的平均速率(加上并计算所有投票的投票数[平均速率=添加的所有投票数/投票数])的速度/速度,以及如何计算1000000票的速度。操作时间增长是否恒定?如果我的电脑比服务器慢1000倍,计算所需的时间是否也是线性的?在
抱歉,如果我的问题是愚蠢的,但我没有数据库编程的经验。谢谢你的回答。在
虽然不是ORM和Django方面的专家,但大多数SQL数据库都有可以快速计算的总数。如果你有一个数值字段作为一个评分,数学将是相当容易和快速的,并在一个最多两个数据库的SQL调用(你也将需要计数的记录数)。检查django ORM是否有总计(我相信它有),否则(我确信django ORM也提供直接SQL),您可能需要编写一个自定义SQL查询来计算速率。这样的查询将过滤所需的图书标识
扩大算法的规模并不是小事。我想你也许应该把这个问题分开,一个是关于模型的,另一个是关于性能的,一旦你有了一些模型(也许还有其他的模型)
相关问题 更多 >
编程相关推荐