Главная Свежие Последние Лучшие Контактная информация  
 
 


Общая информация » Внешние ключи
1.9.4.5 Внешние ключи

Следует учитывать, что в 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. На следующем этапе мы внедрим ограничения внешних ключей для приложений, в которых не так просто обойтись без них.

Следует иметь в виду, что внешние ключи часто применяются неправильно, что может вызывать большие проблемы. Даже если они использованы соответствующим образом, то не являются магическим решением для проблемы целостности ссылочных данных, хотя в некоторых случаях действительно упрощают ситуацию.

Некоторые преимущества внедрения внешних ключей:

При условии, что связи спроектированы правильно, ограничения внешних ключей сделают более сложным для программиста введение противоречивости в базу данных.
Использование каскадных обновлений и удалений может упростить код клиента.
Должным образом разработанные правила внешних ключей помогают в документировании отношений между таблицами.
Недостатки:

Ошибки, которые легко сделать в проектировании отношений ключей, могут вызывать сложные проблемы: например, зацикленные правила или ложные комбинации каскадных удалений.
Правильно написанное приложение будет само по себе обеспечивать отсутствие нарушения целостности ссылочных данных перед началом работы запроса. Таким образом, дополнительные проверки на уровне базы данных только понизят производительность для такого приложения.
Администраторы баз данных часто создают такую сложную топологию связей, при которой затруднительно, а зачастую и вовсе невозможно получить резервную копию или восстановить единичные таблицы.

Добавить в закладки:

 

теги: SQL, DELETE
 

  Еще статьи
Проблема 2000 года и типы данных 87
Ввод запросов 56
Что делать, если работа MySQL сопровождается постоянными сбоями 122
Послеустановочные настройка и тестирование 157
Журнал ошибок 166
 


  Категории
Общая информация 73
Установка MySQL 78
Учебное пособие по MySQL 33
Администрирование баз данных 98
Оптимизация в MySQL 41
Справочник по языку MySQL 75
Типы таблиц MySQL 55
Интерфейсы для MySQL 89
Расширение MySQL 18
Проблемы и распространенные ошибки 33
Привнесенные программы 6
Перенос на другие системы 15
 

  Теги
 

  Лучшее на сайте
Сравнение возможностей MySQL и PostgreSQL 442
Адаптивный хешированный индекс 381
Синтаксис оператора EXPLAIN (получение информации о SELECT) 330
Функции даты и времени 319
mysqlimport, импорт данных из текстовых файлов 316
Основные возможности MySQL 313
Запуск MySQL на Windows NT, 2000 или XP 305
Что представляет собой компания MySQL AB? 299
Типы данных DATETIME, DATE и TIMESTAMP 291
Использование символических ссылок для таблиц 260
 

  Друзья сайта
 

  Интересное
 

 
Использование материалов только при активной гиперссылке "http://sql-book.net"
Copyright 2008 http://sql-book.net Серия сайтов: "Стань умным!".