Программирование >>  Хронологические базы данных 

1 ... 93 94 95 [ 96 ] 97 98 99 ... 348


Удобно будет ввести термин ссылочный путь. Пусть имеются переменные-отношения Rn, R(n-l), R2, Rl, такие, что сушествует ссылочное ограничение из переменной-отношения Rn в переменную-отношение R(n-l), ссылочное ограничение из переменной-отношения R(n-l) в переменную-отношение R(n-2), ... и ссылочное ограничение из переменной-отношения R2 в переменную-отношение R1.

Rn -> R(n-l) -> R(n-2) -> ... -> R2 -> Rl

Тогда цепочка стрелок из Rn в R1 будет представлять ссылочный путь из переменной-отношения Rn в переменную-отношение Rl.

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

VAR ЕМР BASE RELATION

{ EMPI EMPI,..., MGR EMP EMPi, ... } PRIMARY KEY { EMPI }

FOREIGN KEY { RENAME MGR EMP AS EMPI } REFERENCES EMP ;

Здесь атрибут MGR EMP представляет номер того служащего, который является менеджером для служащего, определяемого значением атрибута EMPt. Например, кортеж для служащего с номером Е4 в качестве значения атрибута MGR EMPt может включать значение ЕЗ, которое, по сути, представляет собой ссылку на кортеж переменной-отношения ЕМР для служащего с номером ЕЗ. (Обратите внимание, что в этом примере необходимо переименовать атрибут внешнего ключа, чтобы обеспечить приведенное выше требование из п. 3.) Подобные переменные-отношения иногда называют самоссылающимися.

Упражнение. Придумайте какие-нибудь данные для этого примера.

8. Самоссылающиеся переменные-отношения, подобные переменной-отношению ЕМР в предыдущем примере, на самом деле представляют собой специальный случай более общей ситуации, при которой могут возникать ссылочные циклы. Переменные-отношения Rn, R(n-l), R2, Rl образуют ссылочный цикл, если переменная-отношение Rn содержит внешний ключ, ссылающийся на переменную-отношение R(n-l), переменная-отношение R(n-l) содержит внешний ключ, ссылающийся на переменную-отношение R(n-2), и наконец, переменная-отношение R1 содержит внешний ключ, ссылающийся вновь на переменную-отношение Rn. Или более кратко: ссылочный цикл существует, если есть ссылочный путь из некоторой переменной-отношения Rn к самой себе.

Rn -> R(n-l) -> R(n-2) -> ... -> R2 -> Rl-> Rn

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



жду кортежами. Однако обратите особое внимание на то, что не все подобные связи представлены ключами таким способом. Например, существует связь ( совместное размещение ) между находящимися в одном городе поставщиками и деталями, представленная атрибутами CITY переменных-отношений S и Р. В этом случае данный поставщик и данная деталь размещены совместно , если они находятся в одном и том же городе. Как видите, эта связь представлена без помощи ключей.

10. Исторически понятие внешнего ключа было определено лишь для базовых переменных-отношений - факт, который сам по себе поднимает некоторые вопросы (подробности приводятся при обсуждении принципа взаимозаменяемости в разделе 9.2 главы 9). Мы не навязываем здесь подобных ограничений, однако для простоты изложения ограничим наше обсуждение лишь базовыми переменными-отношениями (где это не связано с какими-либо различиями).

11. В реляционной модели первоначально требовалось, чтобы внешние ключи ссылались конкретно на первичные ключи, а не просто на потенциальные ключи (например, [8.8]). В общем случае мы отвергаем такое ограничение как излишнее и нежелательное, хотя на практике оно позволяет поддерживать в системе определенный порядок [8.13]. Обычно мы будем следовать такому порядку в наших примерах.

12. Вместе с понятием потенциального ключа реляционная модель содержит следующее правило поддержки ссылочной целостности.

Ссылочная целостность. База данных не должна содержать значений внешних ключей, не имеющих cooтвeтcтвия.

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

Ниже приведен синтаксис для определения внешнего ключа.

FOREIGN KEY { <список элементов> } REFERENCES <имя переменной-отношений>

Это предложение должно присутствовать в определении ссылающейся переменной-отношения. Дополнительно отметим следующее.

Каждое значение в параметре <список элементов> представляет собой или параметр <имя атрибута>, определяющий атрибут ссылочной переменной-отношения, или выражение следующего вида.

RENAME <имя атрибута> AS <имя атрибута>

Правило ссылочной целостности можно рассматривать как метаограничение. Оно означает, что любая база данных дол.жна быть объектом определенных ограничений целостности, специфических именно для нее. В совокупности эти ограничения гарантируют, что правило ссылочной целостности не будет нарушено в конкретной базе данных. По ходу дела отметим, что в отношении реляционной модели обычно считается, что она включает другое метаограничение - правило целостности сущностей. Однако это npaeiuio тесно связано с концепцией NULL-значений, поэтому мы отложгси его обсужденг1е до главы 18.



(В качестве примера построения предложения RENAME может служить приведенное выше определение самоссылаюшейся переменной-отношения ЕМР.)

Параметр <имя переменной-отношени> идентифицирует ссылочную переменную-отношение.

Примеры определения внешних ключей неоднократно были представлены в данной книге (например, см. рис. 3.9 в главе 3).

Замечание. Как указывалось в разделе 8.5, определение внешнего ключа фактически является сокрашенной записью некоторого ограничения базы данных (или определенного ограничения переменной-отношения в случае самоссылающейся переменной-отношения), но только если это определение не содержит конкретных ссылочных операций . В последнем случае определение внешнего ключа становится чем-то большим, чем просто ограничение целостности как таковое. Подробнее этот вопрос рассматривается в следующих подразделах.

Ссылочные операции

Рассмотрим следующий оператор. DELETE S WHERE S = S ( SI ) ;

Предположим, что оператор DELETE выполняет именно те действия, которые и должен выполнять, т.е. удаляет кортеж описания поставщика с номером S1, и не более того. Также предположим, что база данных включает некоторые поставки для поставщика с номером S1 (как показано на рис. 3.8) и выполняемое приложение не намеревается удалять сведения об этих поставках. Если впоследствии система проверит выполнение ограничений ссылочной целостности между переменными-отношениями поставщиков и поставок, то будет обнаружено их нарушение и выдано сообщение об ошибке.

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

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

VAR SP BASE RELATION { ... } ...

FOREIGN KEY { SI } REFERENCES S

ON DELETE CASCADE ;



1 ... 93 94 95 [ 96 ] 97 98 99 ... 348

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика