Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Управление данными (пособие).pdf
Скачиваний:
280
Добавлен:
21.05.2015
Размер:
5.42 Mб
Скачать

87

ПЛОЩАДЬ, ОБЪЕМ}, являются следующие ограничения, наложенные на значения атрибутов для каждого кортежа:

ПЛОЩАДЬ = ДЛИНА × ШИРИНА и ОБЪЕМ = ДЛИНА × ШИРИНА × ВЫСОТА

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

9.3.Ограничения целостности уровня отношения

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

Кважнейшим видам такого рода ограничений относятся рассматриваемые

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

Также к ограничениям отношения относится, например, требование,

накладываемое на отношение СТУДЕНТЫ, имеющее атрибут НОМЕР_ГРУППЫ, состоящее в том, чтобы в каждой учебной группе было не меньше 25 студентов. Очевидно, что для обеспечения выполнения такого ограничения для конкретного кортежа необходимо использование информации о значениях данного атрибута в других кортежах.

88

Потенциальные, первичные, альтернативные ключи отношения

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

потенциальные (возможные), первичные и альтернативные ключи. В связи с этим определим эти понятия более строго [1].

Пусть R – некоторая переменная отношения. Тогда потенциальный ключ (candidate key), скажем K для отношения R – это подмножество множества атрибутов отношения R, всегда обладающее следующими свойствами:

свойство уникальности – нет двух кортежей в текущем значении переменной отношения R с одинаковым значением K;

свойство неизбыточности – никакое из подмножеств K не обладает свойством уникальности.

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

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

переменная отношение.

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

СТУДЕНТ

КОД_СТУД

ИМЯ_СТУД

ПАСПОРТ

С2

Иванов

01 02 123456

С5

Петрова

03 04 234567

С4

Сидоров

05 06 345678

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

КОД_СТУД и ПАСПОРТ. Значения идентификаторами кортежей, так неизбыточно определяет запись о

89

конкретном студенте, так как не может быть двух студентов с одинаковыми кодами, также, как и с одинаковыми серией и номером паспортов.

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

УСПЕВАЕМОСТЬ

КОД_СТУД

ДИСЦИПЛИНА

№БИЛЕТА

ОЦЕНКА

С9

Физика

10

5

С9

Математика

16

4

С9

История

3

4

С6

Физика

13

3

С6

Математика

2

4

С1

Математика

10

5

С7

Информатика

17

5

потенциальный ключ включает в себя два атрибута {КОД_СТУД, ДИСЦИПЛИНА}, причем, в отличие от предыдущего примера, каждый из этих атрибутов в отдельности не являются ключами. Из таблицы видно, что значения ни одного из этих атрибутов сами по себе не являются уникальными. Свойством уникальности обладает именно пара значений этих атрибутов (конкретный студент по конкретной дисциплине на экзамене получает единственный билет и только одну оценку).

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

Обратим внимание также на требование неизбыточности потенциального ключа. Это требование говорит о том, что не всякое множество атрибутов, совокупность значений которых обладает уникальностью и позволяет идентифицировать кортежи, является потенциальным ключом. Действительно, в приведенном выше отношении УСПЕВАЕМОСТЬ сочетания трех атрибутов

{КОД_СТУД, ДИСЦИПЛИНА, ОЦЕНКА} или {КОД_СТУД, ДИСЦИПЛИНА,

№БИЛЕТА}, а также всех четырех атрибутов {КОД_СТУД, ДИСЦИПЛИНА, №БИЛЕТА, ОЦЕНКА} тоже позволяют однозначно идентифицировать кортежи отношения (первое свойство потенциального ключа). Однако, тем не менее, ни один из этих наборов атрибутов не является потенциальным ключом, из-за своей избыточности для целей идентификации кортежей. Как уже указывалось, для идентификации кортежей этого отношения достаточно сочетания двух атрибутов {КОД_СТУД, ДИСЦИПЛИНА}, именно эта пара и является составным потенциальным ключом этого отношения, остальные же атрибуты для целей идентификации кортежей являются избыточными.

90

Важность потенциальных ключей в реляционной модели состоит в том,

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

Единственный гарантированный системой способ точно указать на какой-

нибудь кортеж – это указать значение некоторого потенциального ключа.

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

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

В реляционной модели по традиции один из потенциальных ключей выбирают в качестве первичного ключа (primary key). В таком случае остальные потенциальные ключи (при их наличии) будут называться

альтернативными ключами (alternate key).

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

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

Потенциальные ключи и NULL-значения

Использование маркеров NULL является, как уже говорилось выше, средством представления ситуации, когда конкретное значение какого-либо атрибута не известно или не определено. Рассмотрим, каким образом возможность того, что значение атрибута конкретного кортежа отношения может отсутствовать (помечено маркером NULL) сочетается со свойствами

91

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

Как уже говорилось, ключ отношения является средством идентификации объектов, описываемых кортежами отношения. Это обеспечивается свойством уникальности значений ключа в отношении. Допущение того, чтобы значение атрибута, являющегося ключом или его частью, могли отсутствовать, то есть быть неопределенными, явно противоречит требованию уникальности ключа. Действительно, если значение ключа или его части не определено, то не может быть и речи о возможности идентификации с помощью него кортежей отношения (в сказках это формулируется как – «найди то, не знаю что»).

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

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

Ни один из атрибутов, составляющих первичный ключ, не может принимать NULL-значения.

Другими словами, объявление атрибута (атрибутов) отношения первичным ключом (в языке SQL для этого используются ключевые слова PRIMERY KEY) фактически означает введение для этого атрибута (атрибутов) обязательности указания его (их) значений. В языке SQL это эквивалентно применению к атрибуту ограничения NOT NULL.