Главная » SQL, Базы данных » ТИПЫ ОТНОШЕНИЙ

0

Теперь перейдем к изучению отношений. В этом описании часто будут  рассматриваться аналогии с определениями, касающимися кортежей, которые были сформулированы в предыдущем разделе, но применительно к отношениям должно быть приведено намного больше информации по сравнению с  кортежами, поэтому соответствующий материал был разбит на несколько разделов: в разделе 6.3 рассматриваются типы отношения, в разделе 6.4 — значения отношений, а в разделе 6.5 — переменные отношения (relation variable, или сокращенно relvar).

Вначале рассмотрим точное определение термина отношение. Значение отношения (или просто отношение), допустим г, состоит из заголовка и тела4, которые соответствуют определениям, приведенным ниже.

■  Заголовок отношения r представляет собой заголовок кортежа, определение кото рого приведено в разделе 6.2. Отношение r имеет такие же атрибуты (следова тельно, такие же имена и типы атрибутов) и такую же степень, как заголовок.

■  Тело отношения r представляет собой множество кортежей, имеющих один и тот же заголовок; кардинальность отношения r определяется как кардинальность этого множества. (Вообще говоря, кардинальностью множества называется коли чество элементов множества.)

Тип отношения r определяется заголовком r и имеет такие же атрибуты  (следовательно, имена и типы атрибутов) и степень, как и сам заголовок. Ниже приведено точное определение имени типа отношения.

RELATION   {   А1   Т1,   А2   Т2,    …,   An  Tn   }

А здесь показан пример отношения (он аналогичен, но не идентичен отношению, показанному на рис. 4.6 в главе 4).

Это отношение имеет следующий тип.

RELATION { MAJOR_P# P#, MINOR_P# P#, QTY QTY }

4 Если рассматривается обычное изображение отношения в виде таблицы, то заголовок соответствует строке имен столбцов, а тело — множеству строк с данными. В литературе  заголовок именуется также схемой (отношения) или иногда просто схемой. Кроме того,  заголовок  иногда называют содержанием (intension), и в таком случае для обозначения тела применяется термин расширение (extension).

В неформальном изложении принято исключать из заголовка отношения имена типов и показывать только имена атрибутов. Поэтому приведенное выше отношение можно

неформально представить следующим образом.

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

RELATION {

TUPLE { MAJOR_P# Р#(‘P1′),MINOR_P# P#(‘P2′), QTY QTY(5) }    ,

TUPLE { MAJOR_P# P#(‘P1′),MINOR_P# P#(‘P3′), QTY QTY(3) }    ,

TUPLE { MAJOR_P# P#(‘P2′),MINOR_P# P#(‘P3′), QTY QTY(2) }    ,

TUPLE { MAJOR_P# P#(‘P2′),MINOR_P# P#(‘P4′), QTY QTY(7) }    ,

TUPLE { MAJOR_P# P#(‘P3′),MINOR_P# P#(‘P5′), QTY QTY(4) }    ,

TUPLE{ MAJOR_P# P#(‘P4′),MINOR_P# P#(‘P6′), QTY QTY(8)    } }

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

RELATION   [   <heading>   ]   {   <tuple exp commalist>   }

Здесь необязательный параметр <heading>, представляющий собой  разделенный запятыми   список   атрибутов   <attribute>,   заключенный   в    фигурные   скобки, требуется,  только  если  не  задан  параметр  с   обозначением  списка  выражении кортежа < tuple exp coimalist>.  Безусловно,  все выражения кортежа < tuple exp> должны относиться к  одному и тому же типу кортежа, а этот тип кортежа должен быть точно таким же, как и тот, который определен параметром <heading>, если задан этот параметр.

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

Как и в случае кортежей, отношение степени один называется унарным, отношение

степени два бинарным, отношение степени три тернарным (и т.д.); в общем, отношение степени п называется п-арным. Отношение нулевой степени (т.е.  отношение без атрибутов) принято называть нуль-арным (последний вариант отношения подробно рассматривается в следующем разделе). Кроме того,  следует отметить, что справедливы приведенные ниже утверждения.

■     Каждое подмножество заголовка является заголовком (как и в случае кортежей).

■     Каждое подмножество тела является телом.

В обоих случаях рассматриваемое подмножество может, в частности, быть пустым подмножеством.

Генератор типа RELATION

В языке Tutorial D предусмотрен генератор типа RELATION, который может быть вызван (например) в определении некоторой переменной отношения.  Соответствующий пример приведен ниже.

VAR PART_STRUCTURE …

RELATION { MAJOR_P# P#, MINOR_P# P#, QTY QTY } … ;

(Здесь для упрощения исключены те части определения, которые не относятся к данной теме.) В общем, генератор типа RELATION имеет такую же форму, как и генератор типа TUPLE, за исключением того, что вместо ключевого слова TUPLE применяется ключевое слово RELATION. Тип отношения, выработанный в результате конкретного вызова генератора типа RELATION (например, только что показанный в определении переменной отношения PART_STRUCTURE), безусловно, является сгенерированным типом.

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

Источник: Дейт К. Дж., Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 1328 с.: ил. — Парал. тит. англ.

По теме:

  • Комментарии