Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Внешние ключи



Ограничение внешнего ключа говорит, что значения в колонке (или группе колонок) должно совпадать с значениями, которые существуют в некоторых строках другой таблицы. Мы говорим, что внешний ключ обслуживает ссылочную целостность между двумя относящимися друг к другу таблицами. Таблица может содержать более одного ограничения внешнего ключа. Это используется при реализации между таблицами отношений многие-ко-многим. Пусть у вас есть таблицы products и orders, но теперь вы хотите позволить таблице orders содержать несколько товаров (что не позволяет делать ранее использованная структура таблицы). Мы знаем, что внешние ключи запрещают создание строк в orders, которые не относятся к какому-либо существующему товару. Но если нужно удалить товар из таблицы products после того как в orders создана запись, которая ссылается на него? SQL позволяет вам управлять возможными действиями в этой ситуации. Напрашивается несколько вариантов:

· Запретить удаление ссылочного продукта

· Всё-равно удалить строку

· Что-то другое?

Запрет на удаление и каскадное удаление являются наиболее часто употребляемыми опциями. RESTRICTпредотвращает удаление ссылочной строки. NO ACTION означает, что если во время проверки ограничения существуют какие-либо ссылающиеся строки, возникает ошибка; это поведение по умолчанию, если вы не зададите что-либо другое. (Важнейшее различие между этими двумя альтернативами состоит в том, что NO ACTIONпозволяет отложить проверку до окончания транзакции, а RESTRICT нет.) CASCADE говорит, что когда ссылочная строка удаляется, строка(и) ссылающиеся на неё, также должны быть автоматически удалены. Есть и две другие опции: SET NULL и SET DEFAULT. Они приводят к тому, что значения ссылающихся колонок будут установлены соответственно в null или в значение по умолчанию, когда ссылочная строка будет удалена. Заметим, что выполнение этих действий не освобождает вас от отслеживания каких-либо ограничений. Например, если вы задали действие SET DEFAULT, но значение по умолчанию не удовлетворяет внешнему ключу, выполнение операции приведёт к ошибке.

Аналогично ON DELETE, также существует ON UPDATE, вызов действия по которому происходит, когда ссылочная колонка изменяется (обновляется). Список возможных действий тот же самый.

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

В завершении, мы должны отметить, что внешний ключ должен ссылаться на колонки, которые либо являются первичным ключом, либо формой ограничения уникальности. Если внешний ключ ссылается на ограничение уникальности, то необходимо обратить внимание на некоторые дополнительные вещи, такие как совпадение со значениями null. Об этом рассказывается в справочной документации CREATE TABLE.





Дата публикования: 2015-02-18; Прочитано: 370 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...