Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных (лекция).doc
Скачиваний:
2
Добавлен:
30.07.2019
Размер:
135.17 Кб
Скачать

Понятие внешнего ключа

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

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

Пусть R2 – базовое отношение некоторой БД, тогда внешний ключ отношения R2 – это подмножество множества атрибутовR2 такое, что:

  • существует базовое отношение R1, содержащее потенциальный ключ

  • каждое значение внешнего ключа в текущем значении R2 всегда совпадает со значением потенциального ключа некоторого кортежа в текущем значении отношения R1.

Следствие из определения:

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

  2. Внешний ключ будет составным тогда и только тогда, когда соответствующий потенциальный ключ также будет составным, например, в БД Факультет есть отношение Расписание. В отношении Расписание присутствует составной внешний ключ Группа, Дисциплина, Преподаватель.

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

Правило ссылочной целостности

С понятием внешнего ключа связывается еще ряд терминов. По сути значение внешнего ключа является ссылкой кортежу., содержащему соответствующему значению потенциального ключа. Этот картеж называется ссылочный(целевой), а содержащие его отношения – ссылочное (целевое) отношение. Отношение, содержащее внешний ключ называется ссылающимся отношением, пример, отношение занятий – это ссылочное отношение, а расписание – это ссылающееся отношение. Существует также ссылочная диаграмма, например, Группа Студент Семинар (отношение группа ссылаетсяна отношение студент и семинар). В ссылочной диаграмме стрелки направлены от отношения с внешним ключом к отношению с потенциальным ключом, иногда на стрелочками пишется название атрибута по которому идет связь.

Ссылочной путь от отношения Rn к Rm – это последовательность связанных отношений, которая приводит от Rn Rm… например ссылочный путь от отношения студент к отношению занятие – это CтудентГруппаЗанятие.

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

Правило внешних ключей

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

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

1) что должно произойти при попытке изменить(обновить) значение потенциального ключа на который имеется ссылка(например, заменить название группы БИ-11 на БИ-21 в таблицы Группа в начале учебного года) возможны как минимум 2 варианта ответа на такой вопрос:

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

  • Каскадировать, т.е. обновить значения во всех ссылающихся картежах.

2) что должно произойти при попытке удалить объект ссылки внешнего ключа, например, удаляем все группы 5 курса из таблицы Группа в конце учебного года. Возможны 2 аналогичных варианта:

  • Ограничить, т.е не удалять пока пользователь не удалит ссылающиеся картежи (отложить удаления).

  • Каскадирование, т.е удалить все соответствующие ссылающиеся картежи.

Выбор ответов на эти 2 вопроса и является заданием или определением правил внешних ключей. В СУБД MS ACCES определение правил внешних ключей осуществляется при создании связей между таблицами: если будет отмечен параметр «Каскадное обновление связанных полей», значит будет выбрана операция каскадирования для обновления. Если не отмечен этот параметр – то ограничение. Аналогично с параметром «каскадное удаления связанных записей».