我对两种文章分配给杂志的方式存在疑问。模型的一些伪代码可能是:
class Article():
title = ...
text = ...
magazine = ForeignKey(Magazine, db_index=True)
class Magazine():
...
class ArticleMagazineAllocation():
article = OneToOneField(Article, db_index=True)
magazine = ForeignKey(Magazine, db_index=True)
allocated_on = DateTimeField()
我可以通过文章创建一个ForeignKey to Magazine。或者,我可以使用ArticleMagazineAllocation模型来连接两者,我希望由于多种原因,存储关于"分配"的额外数据。
对于第一种情况,查询将是: magazine_articles = Article.objects.filter(magazine = mymagazine)
对于第二个,查询将是: magazine_aticles = Article.objects.filter(articlemagazineallocation__magazine = mymagazine)
使用LOT(数百万)篇文章和一些(数百种)杂志,使用第二种方法会有相当大的速度损失吗?
答案 0 :(得分:0)
如果您需要建模需要关系本身的其他数据的多对多关系,您应该创建一个中间模型。要直接查询相关模型,您可以使用选项ManyToMany
在任一模型上放置through
字段。要查询相关模型,您始终可以在Django中使用双下划线查询语法。
https://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.ManyToManyField.through
就性能而言,您可以使用select_related
和prefetch_related
来查询跨越多个表格的大型数据集。