Замедляют ли нулевые внешние ключи работу?
Я реализую прикрепление файлов к определенным объектам в проекте, над которым я работаю. Есть шесть или около того классов объектов, которые могут иметь прикрепленные файлы (которые будут показаны в их представлениях Detail и управляться через ссылку оттуда). Модель будет выглядеть следующим образом
class JobFile( models.Model):
job = models.ForeignKey( 'jobs.Job', models.SET_NULL,
null=True, blank=True, related_name='attachments', )
quote = models.ForeignKey( 'quotation.Quote', models.SET_NULL,
null=True, blank=True, related_name='attachments', )
#etc
document = models.FileField( ... ) # the attachment
Одно из преимуществ этого метода, а не общего внешнего ключа, заключается в том, что выгрузка может быть привязана сразу к нескольким видам объектов. Другим преимуществом является простота обращения к obj.attachments.all()
в детальных представлениях obj
. Я не ищу большой набор классов объектов, к которым могут быть прикреплены эти файлы.
Однако для любого вложения файла большинство его ForeignKeys будут нулевыми. Я встречал различные упоминания о том, что нулевые ForeignKeys приводят к медленным запросам Django ORM. Нужно ли мне беспокоиться по этому поводу?
Если это имеет какое-то значение, то доступ к этим объектам будет осуществляться почти исключительно через менеджер attachments
обратного ForeignKey на связанном объекте. Единственный раз, когда я вижу необходимость в явной фильтрации JobLine.objects.filter(field__isnull=True)
, - это в контексте управления, ищущего "осиротевшие" файлы (что обычно не должно происходить).