Многие опытные разработчики рекомендуют не использовать наследование нескольких таблиц Django из-за его низкой производительности:
-
Джанго Гоча: конкретное наследство от Якоба Каплана-Мосса, основного участника Джанго.
Почти в каждом случае абстрактное наследование является лучшим подходом в долгосрочной перспективе. Я видел более чем несколько сайтов, разрушенных под нагрузкой, вызванной конкретным наследованием, поэтому я настоятельно рекомендую пользователям Django подходить к любому использованию конкретного наследования с большой долей скептицизма.
-
Два совка Джанго от Дэниела Гринфилда (@pydanny)
Многостоловое наследование, иногда называемое "конкретным наследованием", считается авторами и многими другими разработчиками плохой вещью. Мы настоятельно рекомендуем не использовать его.
Любой ценой каждый должен избегать наследования нескольких таблиц, так как это добавляет путаницу и существенные накладные расходы. Вместо многотабличного наследования используйте явные OneToOneFields и ForeignKeys между моделями, чтобы вы могли контролировать прохождение соединений.
Но без наследования нескольких таблиц я не могу легко
-
Ссылочная базовая модель в другой модели (необходимо использовать GenericForeignKey или обратную зависимость);
-
Получить все экземпляры базовой модели.
(не стесняйтесь добавлять больше)
Так что же не так с этим видом наследования в Джанго? Почему явные OneToOneFields лучше?
Насколько сильно страдает производительность от JOIN? Есть ли тесты, которые показывают разницу в производительности?
Разве select_related()
позволяет нам контролировать, когда вызывается JOIN?
Я переместил конкретные примеры в отдельный вопрос, поскольку этот вопрос становится слишком широким, и добавил список причин для использования многотабличного наследования.