В идеальном мире есть ограничения внешнего ключа, которые когда-либо были необходимы?Необходимы ли ограничения внешнего ключа?
ответ
Внешние ключи обеспечивают Консистенция в СУБД. То есть ни одна дочерняя строка не может ссылаться на несуществующего родителя.
Существует школа мысли о том, что правила согласованности должны выполняться кодом приложения, но это неэффективно и подвержено ошибкам. Даже если ваш код является идеальным и не содержит ошибок и никогда не вводит неверную ссылку, как вы можете быть уверены, что код другого пользователя, который обращается к одной и той же базе данных, также идеален?
Когда в СУРБД применяются ограничения, вы можете положиться на согласованность. Другими словами, база данных никогда не позволяет совершать изменения, которые нарушают ссылки.
Если ограничения связаны с кодом приложения, вы никогда не можете быть уверены, что в базе данных не было ошибок. Вы обнаруживаете, что работаете с частыми сценариями SQL, чтобы поймать неработающие ссылки и исправить их. Дополнительный код, который вы должны написать, чтобы сделать это, намного превосходит любые эксплуатационные затраты на последовательность управления РСУБД.
+1 - Хорошо сказано. –
В дополнение к защите целостности ваших данных ограничения FK также помогают документировать отношения между вашими таблицами в самой базе данных.
+1 - хорошая точка. Они могут быть очень удобными при использовании инструментов генерации кода, таких как CodeSmith. – TrueWill
Да, если вы хотите обеспечить ссылочную целостность.
Мир не может быть совершенным без внешних ключей.
Мир не идеален, поэтому они необходимы.
В дополнение к эффекту документа, упомянутому Дейвом, ограничения FK могут помочь вам записать меньший код и автоматизировать некоторые бит.
Если вы, например, удалите запись клиента, все его счета-фактуры и строки счетов также удаляются автоматически, если у вас есть «ВКЛЮЧИТЬ КАСКАД» на их FK constrainst.
... но зачем вам это нужно? Если вы удалите клиента, разве вы все еще не хотите делать записи о покупках, сделанных ими для ведения бухгалтерского учета? –
Крис: Я понимаю, что вы говорите, но в этом случае вы, вероятно, не хотите удалять клиента, просто установите флаг в своей записи, указав, что они больше не активны. – bcat
@chris: вот почему он настраивается! Для отношений между родителями и детьми это может быть хорошо, но для чисто ссылочных отношений, очевидно, вы не ... –
В дополнение к принудительному исполнению и документированию они могут ускорить выполнение запросов. Оптимизатор запросов может видеть внешнее ограничение, понимать его эффект и делать оптимизацию плана, которая была бы невозможна без ограничения. См. Foreign Key Constraints (Without NOCHECK) Boost Performance and Data Integrity. (Специфичный для SQL Server)
- 1. Размер ограничения внешнего ключа
- 2. Добавление ограничения внешнего ключа
- 3. Нарушение ограничения внешнего ключа
- 4. Ошибка внешнего ограничения ключа
- 5. Ограничения внешнего ключа mysql
- 6. Добавление ограничения внешнего ключа
- 7. Удаление ограничения внешнего ключа
- 8. Ограничения внешнего ключа Innodb
- 9. Ошибка ограничения внешнего ключа
- 10. Поддерживает ли SQLite3 ограничения внешнего ключа?
- 11. Alter Атрибут ограничения внешнего ключа
- 12. ограничения внешнего ключа терпеть неудачу
- 13. Ограничения внешнего ключа Vb.net MYSQL
- 14. Нарушение ограничения внешнего ключа JPA
- 15. Создание сложного ограничения внешнего ключа
- 16. Как определить ограничения внешнего ключа
- 17. Проблема ограничения внешнего ключа Derby
- 18. ограничения внешнего ключа в оракуле
- 19. Синтаксис ограничения SQL-внешнего ключа
- 20. Невозможно сбросить ограничения внешнего ключа
- 21. mysqldbcopy, объединяющий ограничения внешнего ключа?
- 22. Нарушение ограничения внешнего ключа при наличии внешнего ключа
- 23. Игнорировать ограничения внешнего ключа MySQL в PHP
- 24. Что бы отключить ограничения внешнего ключа?
- 25. Предотвращение Doctrine 1, создающего ограничения внешнего ключа
- 26. Зачем использовать ограничения внешнего ключа в MySQL?
- 27. Внутренние базы данных: реализация ограничения внешнего ключа
- 28. Найти ссылочные поля ограничения внешнего ключа
- 29. Добавление ограничения внешнего ключа в таблице vs Изменение таблицы с добавлением ограничения внешнего ключа
- 30. Условная операция CASCADE для ограничения внешнего ключа?
В чем проблема с ограничениями FK? Почему бы вам не использовать их? –
Только если у вас несколько таблиц. –
@Charles: внешний ключ может ссылаться на ту же таблицу, в которой он определен, например. 'Employees.manager_id'. –