モデルを構築する方法に疑問がありました。
私はいくつかのエンティティに投票の可能性を与えたいと思っています。この場合は論文です。私はこの2つの可能性を思いつきました:
オプション1:
Link the entity as a relationship
class Vote(model.Model):
author = models.ForeignKey(User)
created = models.DateField(auto_now=True)
value = models.IntegerField(default=1)
class Paper(models.Model):
author = models.ForeignKey(User)
edition = models.ForeignKey(ConferenceEdition)
votes = models.OneToMany(Vote)
利点:
- モデル (ORM) での作業がより簡単になります
- この投票エンティティを他のユーザーと使用できます
- HTML をレンダリングするときに、ユーザーがどの論文に投票したかを示すために、この情報が必要になる場合があります。
デメリット:
- 残念ながら、データベースが大きくなるほど遅くなる可能性があります。
オプション 2:
クラスをリンクしない
class Vote(model.Model):
author = models.ForeignKey(User)
created = models.DateField(auto_now=True)
value = models.IntegerField(default=1)
entity_id = models.IntegerField()
entity_type = models.CharField(max_length=255,default='Paper')
class Paper(models.Model):
author = models.ForeignKey(User)
edition = models.ForeignKey(ConferenceEdition)
num_votes = models.IntegerField(default=0)
利点:
- それは一種の怠惰な読み込みです。カウンターがあり、情報が必要な場合はそこに行くことができます。
- 早いです(と思います)
デメリット:
- すべての新しい投票を更新するには、新しいロジックに依存する必要があります。
オプション 3:
私が聞いている
ありがとう!