私は本を評価するためのウェブサイトを書いていますが、ログに記録されたユーザーに投票システムを実装する方法がわかりません。ユーザーは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が必要かどうか疑問に思います。投票モデルから値を計算できるからです。ここに私にとって未知のものがいくつかあります:
データベースエンジン、たとえばPostgreSQLが、選択した本の平均レートをカウントする速度(すべての投票の投票を追加してカウントする[平均レート=追加されたすべての投票/投票数])、10000票の場合、および1000000票の場合。稼働時間は一定になりますか?PCをサーバーの1000倍遅い場合、コンピューティングに必要な時間も直線的になりますか?
私の質問がばかげているなら申し訳ありませんが、私はデータベースプログラミングの経験がありません。ご回答ありがとうございます。