Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции 2002.doc
Скачиваний:
44
Добавлен:
15.06.2014
Размер:
335.36 Кб
Скачать

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

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

Для таблиц EMPLOYEE, DEPARTMENT, PROJECT существуют три типа взаимосвязей:

  1. Один к одному (один сотрудник может работать в одном отделе).

  2. Один ко многим (в одном отделе может работать несколько сотрудников).

  3. Многие ко многим (в нескольких отделах может выполняться несколько проектов). Это связь между таблицами, метаотношение.

Родительское (или базовое) отношение — это отношение, которое входит в связь со стороны «один».

Отношение, входящее в связь со стороны «много» называется дочерним.

Механизм реализации связи «один ко многим» состоит в том, что в дочернее отношение добавляются атрибуты, являющиеся ссылками на ключевые атрибуты в родительском отношении (это внешние ключи).

Внешний ключ— это подмножество атрибутовFK(foreignkey) некоторого отношенияR, которое обладает следующими свойствами:

  • Существует отношение Sс потенциальным ключомK

  • Каждое значение FKв отношенииRвсегда совпадает со значением К для некоторого кортежа изS, либо являетсяNULL-значением.

Отношение Rназывается дочерним.

Свойства внешнего ключа:

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

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

  3. внешний ключ может быть не уникальным, так как в дочернем отношении может быть несколько кортежей, ссылающихся на один и тот же кортеж родительского отношения. Это дает отношение «один ко многим».

  4. если внешний ключ все таки обладает свойством уникальности, то связь между отношениями имеет тип «один к одному» и такие отношения можно объединить в одно.

  5. хотя каждое значение внешнего ключа должно совпадать со значением потенциального ключа в некотором кортеже родительского отношения, но обратное неверно.

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

  7. NULL-значение для атрибутов внешнего ключа допустимо только в том случае, когда атрибуты внешнего ключа не входят в состав никакого потенциального ключа.

Лекция №7 (21.03.02.)

Целостность внешних ключей.

Так как внешние ключи являются ссылками на кортежи в другом отношении, то эти ссылки не должны указывать на несуществующие объекты.

Правило целостности внешних ключей:

Внешние ключи не должны быть несогласованными.

Замечание:

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

  2. Сравнение, в которое входит NULL-значение, принимает значение неизвестно. Отсюда следует, что атрибуты потенциального ключа не могут содержать NULL-значение.

Операции, в результате которых нарушается ссылочная целостность:

Существует три таких операции: вставка, удаление и обновление кортежей в отношениях.

Для родительского отношения:

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

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

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

Для дочернего отношения:

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

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

  3. Удаление. При удалении кортежа в дочернем отношении ссылочная целостность не нарушается.