Схемы/Объяснения обработки запросов Django?

Причины использовать Внешние ключи:

  • Вы не получите Осиротевшие строки
  • , можно стать хорошими "на, удаляют каскадное" поведение, автоматически очищая таблицы
  • , знание об отношениях между таблицами в базе данных помогает Оптимизатору запланировать запросы самое эффективное выполнение, так как это в состоянии получить лучшие оценки на кардинальности соединения.
  • FKs дают довольно большую подсказку на том, что статистические данные являются самыми важными для сбора на базе данных, которая в свою очередь приводит к лучшей производительности
  • , они включают все виды автоматически сгенерированной поддержки - ORMs может генерировать себя, инструменты визуализации будут в состоянии создать хорошие разметки схемы для Вас, и т.д.
  • кто-то плохо знакомый с проектом войдет в поток вещей быстрее, так как в других отношениях неявные отношения явно документируются

Причины не использовать Внешние ключи:

  • Вы заставляете DB работать дополнительный над каждым операция CRUD , потому что это должно проверить непротиворечивость FK. Это может быть большой стоимостью, если у Вас есть много маслобойки
  • путем осуществления отношений, FKs определяют порядок, в котором необходимо добавить/удалить вещи, которые могут привести к отказу DB, чтобы сделать то, что Вы хотите. (Предоставленный, в таких случаях, что Вы пытаетесь сделать, создают Осиротевшую строку, и это обычно не хорошая вещь). Это особенно болезненно, когда Вы делаете большие пакетные обновления, и Вы загружаете одну таблицу перед другим со вторым согласованным состоянием создания таблицы (но необходимо делать такую вещь, если существует возможность, что вторые сбои загрузки и база данных теперь непоследовательны?).
  • иногда Вы знаете заранее, что Ваши данные будут грязными, Вы признаете, что, и хотите, чтобы DB принял его
  • , Вы просто - ленивый:-)

, я думаю (я не уверен!), что самые установленные базы данных позволяют определять внешний ключ, который не осуществляется, и просто немного метаданных. Так как бездействие вытирает все основания не использовать FKs, необходимо, вероятно, пойти тем путем, если какая-либо из причин во втором разделе применяется.

7
задан Hank Gay 2 December 2009 в 23:29
поделиться

2 ответа

Я думаю, что эта статья включает информацию, которую вы ищете, с приличной (если загроможденной) диаграммой: http://uswaretech.com/blog/2009/06/django-request-response-processing/

Вы также можете использовать django-debug-toolbar , чтобы получить дополнительную информацию о SQL (и многом другом), происходящих за кулисами конкретного запроса.

6
ответ дан 6 December 2019 в 11:49
поделиться

Вот эта диаграмма из The Django Book (онлайн-версия): alt text

Подробное описание этого процесса описано в главе 3 под заголовком Как Django обрабатывает запрос: полные сведения .

11
ответ дан 6 December 2019 в 11:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: