<<На Главную     <В меню Советы по MSSQL

В предыдущем пункте наших Советов по работе с MS SQL Server шла речь об одном из механизмов создания грамотно спроектированных  баз данных - так называемых Ограничениях. Другим важным инструментом, гарантирующим непротиворечивость информации в вашей базе данных является создание внешнего ключа  -по английски Foreign Key, или просто FK.

 

  

 

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

 

 

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

 

Вполне понятно, что код отдела из таблицы Sotrudniki (поле otdel) должен соответствовать значению из столбца KodOtdela таблицы Справочника отделов SprOtdely.

 

Очевидно, что код отдела (поле otdel) в таблице Sotrudniki должен гарантированно содержаться в справочной таблице отделов - иначе могут появиться сотрудники, которые работают в непойми-каком отделе. Наша задача - создать механизм для выполнения этого требования.

Здесь можно поступить сл. образом - для случая нашего примера составляем инструкцию на t-sql и запускаем её по F5  на выполнение:

 

ALTER TABLE Sotrudniki

ADD CONSTRAINT fkSotrOtdel

FOREIGN KEY(Otdel)

REFERENCES SprOtdely(kodOtdela);

 

Создать внешний ключ t-sql Небольшие комментарии к запросу. Используя предложение ALTER TABLE, мы модифицируем существующую таблицу Sotrudniki, создавая новое ограничение с именем fkSotrOtdel. Ограничение состоит в том, что поле KodOtdela из таблицы Sotrudniki может принимать исключительно те значения, что содержаться в поле kodOtdeld справочника Отделов SprOtdely.

 

 

Если все было сделано правильно, то будет создан новый внешний ключ :

 

 

Теперь попробуем протестировать работу вновь созданного внешнего ключа - попытаемся в поле otdel нашей учебной таблички Sotrudniki ввести запись с несуществующим значением кода отдела. Естественно, получим   сообщение об ошибке сл. содержания  :

 

 

 

Одно важное замечание - при создании внешнего ключа необходимо, чтобы ссылочный столбец в таблице-ограничителе был первичным ключом или уникальным ( иначе при генерации внешнего ключа получите сообщение об ошибке)  :

 

 

Всем успешной работы с MS SQL Server !

Simashkov.2016

03.07.2016 г.

Назад