Главная » SQL, Базы данных » ИСЧИСЛЕНИЕ ДОМЕНОВ

0

Как было указано в разделе 8.1, исчисление доменов отличается от исчисления кортежей тем, что в нем переменные области значений определены на доменах (типах), а не на отношениях. С точки зрения синтаксиса наиболее очевидное различие между исчислением доменов и исчислением кортежей состоит в том, что первое поддерживает дополнительную форму параметра <bool ехр>, который мы будем называть условием принадлежности (membership condition). В общем виде условие принадлежности можно записать следующим образом.

R   {   <pair commalist> }

Здесь R — имя переменной отношения, а каждый параметр <pair> имеет вид А х, где А — имя атрибута переменной отношения R, а х — имя переменной области значений или вызов селектора (чаще всего литерал). В целом, это условие  принимает значение TRUE тогда и только тогда, когда в текущем значении переменной отношения R существует такой кортеж, что для каждого заданного выражения <pair> А х сравнение А = х имеет значение TRUE ДЛЯ данного кортежа. Например, рассмотрим результат вычисления следующего выражения.

SP                                        {     S#                                        S # (   ‘ S 1 ‘ ) ,     Р #     Р # ( ‘ P 1 ‘ )                                         }

Это выражение является условием принадлежности, которое принимает  значение TRUE тогда и только тогда, когда обнаруживается, что в настоящее время существует кортеж с данными о поставке, в котором значение s# равно si, а  значение Р# равно Р1. Аналогичным образом, условие принадлежности

SP  {  S#  SX,  Р#  РХ  }

принимает значение TRUE тогда и только тогда, когда обнаруживается, что в настоящее время существует кортеж с данными о поставке, в котором значение атрибута S# равно текущему значению переменной области значений SX (каким бы оно ни было), а значение атрибута р# равно текущему значению переменной домена РХ (опять же, каким бы оно ни было).

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

Таблица 8.1. Переменные области значений, применяемые в примерах данного

Ниже приведено несколько примеров выражений исчисления доменов.

раздела

SX

SX WHERE S { S# SX }

SX WHERE S { S# SX, CITY ‘London’ }

{ SX, CITYX } WHERE S { S# SX, CITY CITYX } AND  SP { S# SX, P# P#(‘P2′) }

{ SX, PX } WHERE S { S# SX, CITY CITYX } AND P  {  P# PX, CITY CITYY } AND   CITYX

✓  CITYY

Неформально первое выражение обозначает множество всех номеров  поставщиков, второе — множество всех номеров поставщиков в переменной  отношения S, третье — подмножество номеров поставщиков из Лондона.  Следующее выражение — это представленный в терминах исчисления доменов запрос "Определить номера поставщиков и названия городов, в которых находятся поставщики детали с номером Р2" (вспомните, что для формулировки этого запроса в терминах исчисления кортежей требовался квантор существования). И последнее выражение — это представленный в терминах исчисления доменов запрос "Найти все такие пары номеров поставщиков и номеров деталей, что поставщики находятся в том же городе, где хранится деталь".

Ниже приведено несколько примеров из числа рассмотренных в разделе 8.3, но на этот раз выраженных в терминах исчисления доменов (часть из них несколько изменена).

8.7.1.Определить номера поставщиков из Парижа со статусом больше 20 (упрощенная версия примера 8.3.1)

SX WHERE EXISTS STATUSX

{ STATUSX > 20 AND

S { S# SX, STATUS STATUSX, CITY ‘Paris’ } )

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

8.7.2.Найти все такие пары номеров поставщиков, в которых два поставщика находятся в одном городе (см. пример 8.3.2)

{ SX AS SA, SY AS SB } WHERE EXISTS CITYZ

( S { S# SX, CITY CITYZ } AND S { S# SY, CITY CITYZ

} AND SX < SY )

8.7.3.Определить имена поставщиков по крайней мере одной детали красного цвета (см.

пример 8.3.4)

NAMEX WHERE EXISTS SX EXISTS PX ( S { S# SX, SNAME

NAMEX }   AND SP { S# SX, P# PX }

AND P { P# PX, COLOR COLOR(‘Red’) } 1

8.7.4.   Определить имена поставщиков, которые поставляют хотя бы один тип деталей, поставляемых поставщиком с номером S2 (см. пример 8.3.5)

NAMEX WHERE EXISTS    SX EXISTS PX ( S { S#SX, SNAME NAMEX }

AND SP    { S# SX, P# PX } AND SP { S# S#(‘S2′), P# PX } )

8.7.5.   Определить имена поставщиков, которые поставляют детали всех типов

(см. пример 8.3.6)

NAMEX WHERE EXISTS SX ( S { S# SX, SNAME NAMEX } AND FORALL PX ( IF P { P# PX }

THEN SP { S# SX, P# PX

} END IF )

8.7.6.   Определить имена поставщиков, которые не поставляют деталь с номером Р2 (см. пример 8.3.7)

NAMEX WHERE EXISTS SX ( S { S# SX, SNAME NAMEX } AND NOT SP { S# SX, P# P#(‘P2′) } )

8.7.7.   Определить номера поставщиков, которые поставляют, по меньшей мере,

детали всех типов, поставляемых поставщиком с номером S2 (см. пример 8.3.8)

SX WHERE FORALL PX ( IF SP { S# S#(‘S2′), P# PX } THEN SP { S# SX, P# PX } END IF )

8.7.8.   Получить номера деталей, которые либо весят более 16 фунтов, либо поставляются поставщиком с номером S2, либо соответствуют и тому, и другому условию (см. пример 8.3.9)

PX WHERE EXISTS WEIGHTX

( Р { Р# PX, WEIGHT WEIGHTX } AND WEIGHTX > WEIGHT ( 16.0 )

) OR SP { S# S#(‘S2′), P# PX }

Исчисление доменов, как и исчисление кортежей, формально эквивалентно реляционной алгебре (т.е. оно является реляционно полным). Доказательство этого утверждения можно найти, например, в статье Ульмана (Ullman) [8.13].

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

По теме:

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