
- •3.2. Реляционные системы
- •Язык sql и реляционные операции.
- •Сравнения, ограниченные доменом
- •Домены и определение данных
- •Значения отношений
- •Определение данных
- •Свойства отношений
- •Виды отношений
- •Потенциальные ключи
- •Первичные и альтернативные ключи
- •22. Внешние ключи. Определение и свойства. Синтаксис для указания внешнего ключа. Ссылочная целостность.
- •Ссылочная целостность
- •23. Правила внешних ключей. Расширенный синтаксис задания внешнего ключа
Первичные и альтернативные ключи
Базовое отношение может иметь больше одного потенциального ключа.
В реляционной модели один из потенциальных ключей должен быть выбран в качестве первичного ключа в базовом отношении, а остальные потенциальные ключи, если они есть, будут называться альтернативными ключами.
Пример. В отношении ELEMENTS, можно выбрать "обозначение элемента" в качестве первичного ключа, тогда "название элемента" и "атомное число” будут альтернативными ключами.
22. Внешние ключи. Определение и свойства. Синтаксис для указания внешнего ключа. Ссылочная целостность.
Определение термина "внешний ключ".
Пусть R2 — базовое отношение. Тогда внешний ключ FK в отношении R2 — это подмножество множества атрибутов R2, такое что:
существует базовое отношение R1 (RIи R2 не обязательно различны) с потенциальным ключом СК;
каждое значение FK в текущем значении R2 всегда совпадает со значением СК некоторого кортежа в текущем значении R1.
Пояснения к определению.
Внешние ключи, как и потенциальные, определены как .множества атрибутов. Поэтому для них необходимо использовать "скобки множества" (фигурные скобки).
Пример. В отношении SP базы данных поставщиков и деталей внешние ключи, строго говоря, — это {S#} и {Р#}, а не S# и Р#. Однако в неформальном контексте скобки обычно опускают, если это множество содержит только один атрибут.
По определению каждое значение данного внешнего ключа должно являться значением соответствующего потенциального ключа.
Обратное не требуется.
Данный внешний ключ будет составным, т.е. будет состоять из более чем одного атрибута, тогда и только тогда, когда соответствующий потенциальный ключ также будет составным.
Для внешнего ключа не требуется, чтобы он был компонентом первичного ключа или какого-либо потенциального ключа в содержащем его отношении.
Пример (определение базы данных отделов и сотрудников):
В этой базе данных атрибут DEPТ# отношения ЕМР является внешним ключом, соответствующим первичному ключу DEPT# отношения DEPT; однако он, конечно, не является компонентом первичного ключа ЕМР# (и никакого другого потенциального ключа) отношения ЕМР.
Терминология.
Значение внешнего ключа представлено ссылкой к кортежу, содержащему соответствующее значение потенциального ключа.
Ограничение, по которому значения данного внешнего ключа должны быть адекватны значениям соответствующих потенциальных ключей, называют ссылочным ограничением.
Отношение, которое содержит внешний ключ, называется ссылающимся отношением, а отношение, которое содержит соответствующий потенциальный ключ, — ссылочным отношением или целевым отношением (target relation).
Ссылочные диаграммы.
База данных поставщиков и деталей. Существующие в базе данных ссылочные ограничения можно представить средствами следующей ссылочной диаграммы
Каждая стрелка обозначает внешний ключ в отношении, из которого стрелка выходит; этот ключ специфически ссылается на первичный ключ отношения, на который стрелка указывает.
«Ссылочный путь".
Пусть отношения Rn, R(n-1), ..., R2, R1 такие, что имеется ссылочное ограничение из Rn в R(n-1), ссылочное ограничение из R(n-1) в R(n-2), ... и ссылочное ограничение из R2 в R1:
Rn R(n-l) R(n-2) ... R2 Rl.
Тогда цепочка стрелок из Rn в R1 представляет ссылочный путь из Rn в R1.
Отношения R1 и R2 в определении внешних ключей не обязательно различны. В качестве примера рассмотрим следующее отношение:
Здесь ЕМР# — первичный ключ, a MGR_EMP# — внешний ключ, который ссылается на этот первичный. Такие отношения иногда называют самоссылающимися.
Самоссылающиеся отношения, такие как отношение ЕМР в предыдущем примере, в действительности представляют собой специальный случай более общей ситуации, когда могут возникать ссылочные циклы.
Ссылочный цикл существует, если есть ссылочный путь из некоторого отношения Rn к себе:
Rn R(n-l) R(n-2) ... R2 Rl Rn
Синтаксис для указания внешнего ключа
FOREIGN KEY ( element-commalist ) REFERENCES base-relation
Оператор create base relation может включать нуль или более определений внешних ключей
Синтаксис категории element здесь представлен или именем атрибута базового отношения, содержащего его (обычный случай), или выражением вида:
RENAME attribute AS attribute
Первый параметр attribute является именем атрибута содержащего его отношения, а второй параметр attribute представляет собой новое имя для такого атрибута, который реально заменяет первое имя при работе с данным внешним ключом
Полное множество имен атрибутов для внешнего ключа должно совпадать с множеством имен атрибутов для некоторого потенциального ключа базового отношения, указанного после оператора REFERENCES.