Spec-Zone .ru
спецификации, руководства, описания, API
|
InnoDB
механизм хранения поддерживает проверку ограничений внешнего ключа, включая
CASCADE
, ON DELETE
, и ON
UPDATE
. См. Раздел 5.4.5,"InnoDB
и FOREIGN KEY
Ограничения".
Для механизмов хранения кроме InnoDB
, MySQL Server анализирует FOREIGN KEY
синтаксис в CREATE TABLE
операторы, но не использует или хранит это. В будущем реализация
будет расширена, чтобы хранить эту информацию в табличном файле спецификации так, чтобы это могло быть получено
mysqldump и ODBC. На более позднем этапе ограничения
внешнего ключа будут реализованы для MyISAM
таблицы также.
Осуществление внешнего ключа предлагает несколько преимуществ разработчикам базы данных:
Принимая надлежащий проект отношений, ограничения внешнего ключа делают это более трудным для программиста ввести несогласованность в базу данных.
Централизованная проверка ограничений сервером базы данных делает ненужным выполнить, они проверяют сторону приложения. Это устраняет возможность, что различные приложения, возможно, не все проверяют ограничения таким же образом.
Используя расположение каскадом обновлений и удаляет, может упростить код программы.
Должным образом разработанный внешний ключ управляет средством в документировании отношений между таблицами.
Действительно имейте в виду что эти преимущества, прибывшие за счет дополнительных издержек для сервера базы данных, чтобы выполнить необходимые проверки. Дополнительная проверка сервером влияет на производительность, которая для некоторых приложений может быть достаточно нежелательной, чтобы избежаться если возможный. (Некоторое главное коммерческое применение кодировало логику внешнего ключа на уровне приложения по этой причине.)
MySQL дает разработчикам базы данных выбор, которого приближаются, чтобы использовать. Если Вы не нуждаетесь во
внешних ключах и хотите избежать издержек, связанных с осуществлением ссылочной целостности, можно выбрать
другой механизм хранения вместо этого, такой как MyISAM
. (Например, MyISAM
механизм хранения предлагает очень быструю производительность для
приложений, которые выполняют только INSERT
и
SELECT
операции. В этом случае у таблицы нет никаких дыр в середине, и вставки могут быть выполнены одновременно с
извлечениями. См. Раздел 8.10.3, "Параллельные Вставки".)
Если Вы хотите не использовать в своих интересах проверки ссылочной целостности, помните следующие соображения:
В отсутствие серверной проверки отношения внешнего ключа само приложение должно обработать проблемы в отношениях. Например, это должно заботиться, чтобы вставить строки в таблицы в надлежащем порядке, и избежать создавать осиротевшие дочерние записи. Это должно также быть в состоянии восстановиться с ошибок, которые происходят в середине многократной записи, вставляют операции.
Если ON DELETE
единственная возможность ссылочной
целостности, в которой нуждается приложение, можно достигнуть подобного эффекта с MySQL Server 4.0 при
использовании многократной таблицы DELETE
операторы, чтобы удалить строки из многих таблиц с единственным оператором. См. Раздел
13.2.2,"DELETE
Синтаксис".
Обходное решение из-за отсутствия ON DELETE
должно
добавить соответствующее DELETE
операторы к Вашему приложению, когда Вы удаляете записи из таблицы, у которой есть внешний ключ.
Практически, это часто столь же быстро как использующий внешние ключи и более переносимо.
Знайте, что использование внешних ключей может иногда приводить к проблемам:
Поддержка внешнего ключа решает много проблем ссылочной целостности, но все еще необходимо разработать ключевые отношения тщательно, чтобы избежать, чтобы круговые правила или неправильные комбинации расположения каскадом удалили.
DBA весьма свойственно создать топологию отношений, которая мешает восстанавливать
отдельные таблицы от резервного копирования. (MySQL облегчает эту трудность, позволяя Вам временно
отключить проверки внешнего ключа, перезагружая таблицу, которая зависит от других таблиц. См. Раздел 5.4.5,"InnoDB
и FOREIGN KEY
Ограничения". С MySQL 4.1.1 mysqldump генерирует файлы дампа, которые используют
в своих интересах эту возможность автоматически, когда они перезагружаются.)
Внешние ключи в SQL используются, чтобы проверить и осуществить ссылочную целостность, не к объединяющим
таблицам. Если Вы хотите получить следствия многократных таблиц от a SELECT
оператор, Вы делаете это, выполняя соединение между ними:
SELECT * FROM t1 INNER JOIN t2 ON t1.id = t2.id;
См. Раздел 13.2.9.2,"JOIN
Синтаксис", и Раздел 3.6.6, "Используя
Внешние ключи".
FOREIGN KEY
синтаксис без ON DELETE ...
часто
используется приложениями ODBC, чтобы произвести автоматический WHERE
пункты.