Следует учитывать, что в SQL внешние ключи используются не для объединения
таблиц, а главным образом для проверки целостности ссылочных данных
(ограничения внешних ключей). Если необходимо получить результаты из
большого количества таблиц от команды SELECT
, следует делать это через
объединение таблиц:
SELECT * FROM table1,table2 WHERE table1.id = table2.id;
См. разделы section 6.4.1.1 Синтаксис оператора JOIN
и See section 3.5.6 Использование внешних ключей.
В версии сервера MySQL 3.23.44 и выше таблицы InnoDB поддерживают проверку
ограничений внешних ключей (see section 7.5 Таблицы InnoDB
). Для таблиц других
типов сервер MySQL производит анализ синтаксиса FOREIGN KEY
в командах
CREATE TABLE
, но без выполнения дальнейших действий.
Синтаксис FOREIGN KEY
без ON DELETE ...
главным образом применяется для
целей документирования. В некоторых ODBC-приложениях его можно
использовать для автоматического создания выражений WHERE
, но обычно это
легко сделать вручную. FOREIGN KEY
иногда используется в качестве
проверки ограничений, но на практике такая проверка не является
необходимой, если строки вносятся в таблицу в правильном порядке.
В сервере MySQL можно обойти проблему отсутствия реализации ON DELETE ...
добавлением соответствующей команды DELETE
в приложение, когда удаляются
записи из таблицы, имеющей внешний ключ. На практике при этом достигается
почти такая же скорость (в некоторых случаях еще быстрее), как и при
использование внешних ключей, и намного большая переносимость.
В версии сервера MySQL 4.0 можно использовать многотабличное удаление,
чтобы удалить строки из многих таблиц одной командой (see section 6.4.6 Синтаксис оператора DELETE
).
В ближайшем будущем мы расширим реализацию FOREIGN KEY
таким образом, что
информация будет сохраняться в специальном файле таблицы и ее можно будет
извлечь с помощью mysqldump
и ODBC. На следующем этапе мы внедрим
ограничения внешних ключей для приложений, в которых не так просто
обойтись без них.
Следует иметь в виду, что внешние ключи часто применяются неправильно, что может вызывать большие проблемы. Даже если они использованы соответствующим образом, то не являются магическим решением для проблемы целостности ссылочных данных, хотя в некоторых случаях действительно упрощают ситуацию.
Некоторые преимущества внедрения внешних ключей:
Недостатки:
User Comments
Add your own comment.