我对如何构建模型有疑问。
我想给一些实体投票的可能性,在这种情况下,是一篇论文。我想出了这两种可能性:
选项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:
我在听
谢谢!