Главная » SQL, Базы данных » Отношения без атрибутов

0

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

Для того чтобы перейти к более подробному изучению понятия отношения без атрибутов, вначале необходимо рассмотреть вопрос о том, может ли отношение без атрибутов содержать какие-либо кортежи. Ответ на этот вопрос (что также может показаться удивительным) является положительным. Точнее, подобное отношение может содержать, самое большее, один кортеж, а именно, нуль-арный кортеж (т.е. кортеж без компонентов), причем оно не может содержать больше одного такого кортежа, поскольку все нульарные кортежи являются дубликатами по отношению друг к другу. Таким образом, существуют два и только два отношения нулевой степени — содержащие лишь один кортеж и не содержащие вообще ни одного кортежа. Эти два отношения являются настолько важными, что, следуя Дарвену (Darwen) [6.5], автор предусмотрел для них псевдонимы. Первое отношение будет именоваться TABLE_DEE, а второе — TABLE_DUM или сокращенно DEE и DUM (DEE — это отношение с одним кортежем, aDUM — пустое).

Примечание. Для этих отношений нелегко изобразить таблицу! Принятый  способ трактовки отношений как обычных таблиц начинает немного буксовать в случае отношений DEE И DUM.

Почему отношении DEE и DUM ЯВЛЯЮТСЯ такими важными? На этот вопрос есть несколько ответов, более или менее связанных между собой. Одним из этих ответов является то, что эти отношения в реляционной алгебре играют такую роль (см. главу 7), которая немного напоминает роль, принадлежащую пустому множеству в теории множеств или нулю в обычной арифметике. Другой ответ касается того, что вообще подразумевается под отношениями (см [6.5]); по сути DEE означает TRUE, или да, a DUM означает FALSE, или нет. Иными словами, эти отношения имеют наиболее фундаментальный смысл по сравнению со всеми  другими отношениями. (Удобный способ запомнить, какое из этих отношений что означает, состоит в том, что в отношении DEE есть буквы "е", как и в слове yes — да.)

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

RELATION { } { TUPLE { } }

И

RELATION { } { }

Пока мы не имеем возможности более подробно углубиться в эту тему; достаточно сказать, что в последующем изложении отношения DEE и DUM встретятся еще много раз. Дополнительную информацию можно найти в [6.5].

Операции с отношениями

В разделе 6.3 кратко рассматривались реляционные операции применения селектора, присваивания и сравнения на равенство. Вне всякого сомнения, операторы сравнения на неравенство "<" и ">" не могут применяться к отношениям, но отношения, безусловно, могут стать предметом сравнений другого рода в дополнение к простому сравнению на равенство, как будет показано в этом разделе.

Реляционные операции сравнения

Начнем с определения логического выражения <bool ехр> нового типа, с оператором сравнения отношений <relation comp>, которое имеет следующий синтаксис.

<relation  exp> <relation  сотр ор> <relation  exp>

Отношения, обозначенные двумя параметрами <relation exp>  (реляционное  выражение), должны принадлежать к одному и тому же типу, а оператором сравнения отношений <relation сотр ор> должен быть один из следующих операторов.

■   =. Равно.

■     ≠  Не равно.

■       ⊆ Подмножество.

■       ⊂  Строгое подмножество.

■       ⊇  Надмножество.

■       ⊃  Строгое надмножество.

После этого можно разрешить использовать операцию <relation comp> в  любом месте, где допускается применение логического выражения <bоо1 ехр>,  например, в конструкции WHERE. Ниже приведен ряд примеров.

1.          S   {   CITY   }   =   Р   {   CITY   }

Это выражение имеет такой смысл: "Является ли проекция отношения поставщиков по атрибуту CITY равной проекции отношения деталей по атрибуту CITY?"

2.          S   {  S#   }  ⊃ SP   {  S#   }

Это выражение имеет такой смысл (представленный в нем вопрос немного перефразирован): "Есть ли такие поставщики, которые вообще не поставляют детали?"

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

IS_EMPTY   (   <relation   exp>   )

Это выражение возвращает истинное значение TRUE, если отношение, обозначенное как реляционное выражение <relation exp> является пустым, а в  противном случае возвращает ложное значение FALSE.

Другие операторы

Еще одним широко распространенным требованием является обеспечение возможности проверить, присутствует ли указанный кортеж t в указанном отношении r.

t Є  r

Это выражение возвращает TRUE, если t присутствует в r, а в противном случае возвращает FALSE (" Є " является оператором проверки принадлежности к множеству; выражение t Є r можно читать как "t принадлежит к r", или "t является элементом r", или, проще всего, "t [имеется] в r").

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

TUPLE   FROM  r

Это выражение активизирует исключение, если r не содержит точно один кортеж; в противном случае оно возвращает лишь этот один кортеж.

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

Ссылка на тип отношения

Точно так же, как схема именования типа кортежа, описанная в разделе 6.2, упрощает задачу определения типа результата выражения, в котором используется  произвольный кортеж, так и схема именования типа отношения, описанная в разделе 6.3, упрощает задачу определения типа результата произвольного реляционного выражения. Более подробные сведения по этой теме приведены в главе 7, а в этом разделе остановимся на одном простом примере. Если дана переменная отношения поставщиков S, то выражение

S   {   S#,    CITY   }

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

RELATION  {   S#   S#,    CITY   CHAR  }

Аналогичные замечания относятся ко всем возможным реляционным выражениям.

Оператор ORDER BY

Для удобного представления результатов весьма желательно поддерживать оператор ORDER BY, как и в языке SQL (см. главу 3). Подробное определение этого оператора здесь не приведено, поскольку его семантика, безусловно, должна быть очевидной. Но следует обратить внимание на перечисленные ниже особенности этого оператора.

■ Оператор ORDER BY действует (по сути), сортируя кортежи в некоторой указанной последовательности, несмотря на то, что для кортежей не определены операторы "<" и ">" (именно так!).

■     Оператор ORDER   BY не является реляционным оператором, поскольку возвра щаемый им результат не представляет собой отношение.

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

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

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

По теме:

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