Замедляют ли нулевые внешние ключи работу?

Я реализую прикрепление файлов к определенным объектам в проекте, над которым я работаю. Есть шесть или около того классов объектов, которые могут иметь прикрепленные файлы (которые будут показаны в их представлениях 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), - это в контексте управления, ищущего "осиротевшие" файлы (что обычно не должно происходить).

Вернуться на верх