Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
доп.docx
Скачиваний:
37
Добавлен:
26.03.2016
Размер:
115.88 Кб
Скачать

2.8 Ограничение foreign key.

В MS SQL Server отношение между двумя таблицами устанавливается посредством создания ограничения FOREIGN KEY.

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

Ограничение FOREIGN KEY можно определить при создании таблицы. Если таблица уже существует, ограничение FOREIGN KEY можно добавить, в этом случае оно присоединяется к существующим ограничениям PRIMARY KEY или UNIQUE этой или другой таблицы. Таблица может содержать несколько ограничений FOREIGN KEY.

Существующее ограничение FOREIGN KEY можно изменить или удалить. Возможно, потребуется, чтобы ограничение FOREIGN KEY ссылалось на другие столбцы. Однако длину столбца, определяющего ограничение FOREIGN KEY, изменить нельзя.

2.8.1 Ведение ссылочной целостности.

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

Например, каждое название книги в таблице titles должно быть связано с определённым издателем в таблице publishers. Книга не может быть занесена в базу данных, если её издатель отсутствует в базе данных.

Ссылочная целостность БД определяется следующими правилами:

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

- нельзя удалить строку из таблицы первичного ключа (родительской таблицы), если соответствующие ей строки присутствуют в дочерней таблице. Прежде, чем удалять строку из таблицы первичного ключа, необходимо удалить совпадающие с ней строки из связанной таблицы. Например, нельзя удалить строку из таблицы jobs, если задание, представляемое данной строкой, задействует сотрудников, перечисленных в таблице employee.

- нельзя изменить значение первичного ключа в родительской таблице, если эта строка имеет соответствующие строки в дочерней таблице. Например, нельзя изменить значение строки job_id в таблице jobs, если в таблице employee существуют связанные с ней данные о сотрудниках.

Ссылочная целостность может быть введена при выполнении следующих условий:

- родительская таблица имеет первичный ключ или ограничение уникальности;

- связываемые столбцы имеют одинаковый тип данных и размер;

- связываемые таблицы принадлежат одной базе данных.

2.8.2 Диалоговое окно "Связи внешнего ключа".

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

В диалоговом окне " Отношения внешнего ключа" доступны следующие параметры:

- Выбранный элемент Отношение

Выводит список существующих связей. Выберите связь, чтобы ее свойства отобразились в сетке справа. Если этот список пуст, то для этой таблицы не было определено ни одной связи.

-Добавить

Создает новую связь. Спецификации таблиц и столбцов должны быть заданы, иначе связь будет недопустима.

-Удалить

Удаляет связь, выбранную в списке Выбранный элемент Отношение. Чтобы отменить добавление связи, удалите эту связь, нажав данную кнопку.

- Категория (Общие)

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

- Проверка существующих данных при создании и возобновлении

Проверяет все существующие данные в таблице перед созданием или возобновлением ограничения относительно этого ограничения.

- Категория спецификации таблиц и столбцов

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

- Базовая таблица внешнего ключа

Показывает, какая таблица содержит столбец, действующий как внешний ключ в выбранной связи.

- Столбцы внешних ключей

Показывает, какой столбец действует как внешний ключ в выбранной связи.

- Базовая таблица первичного или уникального ключа

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

- Категория идентификаторов

Разверните, чтобы увидеть поля свойств Имя и Описание.

- Имя

Показывает имя связи. Если создается новая связь, ей присваивается имя по умолчанию в зависимости от таблицы, отображаемой в активном окне в Конструкторе таблиц. Это имя всегда можно изменить.

- Описание

Описывает связь. Чтобы ввести более подробное описание, щелкните Описание и нажмите кнопку с многоточием (...) справа от поля свойства. При этом появится большее поле для записи текста.

- Категория конструктора таблиц

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

- Принудительная репликация

Показывает, использовать ли данное ограничение, когда агент репликации выполняет в таблице вставку, изменение или удаление. Дополнительные сведения см. в разделе Управление ограничениями, идентификаторами и триггерами с помощью параметра "NOT FOR REPLICATION".

- Принудительное ограничение внешнего ключа

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