Причины использовать Внешние ключи:
- Вы не получите Осиротевшие строки
- , можно стать хорошими "на, удаляют каскадное" поведение, автоматически очищая таблицы
- , знание об отношениях между таблицами в базе данных помогает Оптимизатору запланировать запросы самое эффективное выполнение, так как это в состоянии получить лучшие оценки на кардинальности соединения.
- FKs дают довольно большую подсказку на том, что статистические данные являются самыми важными для сбора на базе данных, которая в свою очередь приводит к лучшей производительности
- , они включают все виды автоматически сгенерированной поддержки - ORMs может генерировать себя, инструменты визуализации будут в состоянии создать хорошие разметки схемы для Вас, и т.д.
- кто-то плохо знакомый с проектом войдет в поток вещей быстрее, так как в других отношениях неявные отношения явно документируются
Причины не использовать Внешние ключи:
- Вы заставляете DB работать дополнительный над каждым операция CRUD , потому что это должно проверить непротиворечивость FK. Это может быть большой стоимостью, если у Вас есть много маслобойки
- путем осуществления отношений, FKs определяют порядок, в котором необходимо добавить/удалить вещи, которые могут привести к отказу DB, чтобы сделать то, что Вы хотите. (Предоставленный, в таких случаях, что Вы пытаетесь сделать, создают Осиротевшую строку, и это обычно не хорошая вещь). Это особенно болезненно, когда Вы делаете большие пакетные обновления, и Вы загружаете одну таблицу перед другим со вторым согласованным состоянием создания таблицы (но необходимо делать такую вещь, если существует возможность, что вторые сбои загрузки и база данных теперь непоследовательны?).
- иногда Вы знаете заранее, что Ваши данные будут грязными, Вы признаете, что, и хотите, чтобы DB принял его
- , Вы просто - ленивый:-)
, я думаю (я не уверен!), что самые установленные базы данных позволяют определять внешний ключ, который не осуществляется, и просто немного метаданных. Так как бездействие вытирает все основания не использовать FKs, необходимо, вероятно, пойти тем путем, если какая-либо из причин во втором разделе применяется.
задан Hank Gay 2 December 2009 в 23:29
поделиться