1
我对如何构建模型有疑问。为可扩展性/性能选择最佳的Django架构
我想给一些实体投票的可能性,在这种情况下,一篇论文。我想出了这个两种可能性:
选项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时可能需要这些信息,以显示用户已投票的哪些论文。
Desavantages:
- 恐怕最大的数据库,慢就可以得到的。
选项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)
Avantages:
- 这是一种懒加载的,我有一个计数器,如果我需要的信息我可以去找它。
- 它的速度更快(我认为)
Desavantages:
- 必须依靠新的逻辑来更新所有新票。
方案3:
我听
谢谢!
+1你绝对应该考虑第一种和第三种方法的结合。我不确定的一件事是拥有“票”ManyToManyField,因为我不确定相同的投票是否适用于多篇论文。如果这不是OneToMany就足够了。 – astevanovic 2012-07-16 00:05:18
对不起,我的意思是oneToMany。我的错,我会编辑这个问题。 – 2012-07-16 08:20:50