Главная » SQL, Базы данных » ИСЧИСЛЕНИЕ КОРТЕЖЕЙ

0

Как и при описании реляционной алгебры в главе 7, сначала введем для реляционного исчисления конкретный синтаксис, взяв за образец (хотя  умышленно не совсем точный) версию исчисления языка Tutorial D, определенного в приложении А книги [3.3], а затем перейдем к обсуждению семантики. В следующем подразделе обсуждается синтаксис, а в остальных — семантика.

Синтаксис

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

Начнем с повторения синтаксиса параметра <rela tion exp>, приведенного в главе 7.

<relation  ехр>

: : =   RELATION  {   <tuple  exp commalist>  } |   <relvar name> |

<relation op  inv>   j   <with exp>  |

<introduced name> j    (   <relation exp>    )

Иными словами, синтаксис параметра <relation exp> остается прежним,  однако один из наиболее важных его подпараметров, <relation op inv>,  который является единственным рассматриваемым в данной главе во всех  подробностях, теперь будет иметь совершенно иное определение.

<range  var  def>

::=  RANGEVAR <range   var name>

RANGES   OVER  <relation   exp   commalist>     ;

Параметр <range  var name> может использоваться1 как < tuple  exp>, но лишь в определенном контексте, а именно:

■     перед точкой в уточняющем выражении <range attribute ref>;

■     сразу после квантора в параметре <quantified bool  exp>;

■     как операнд в параметре <Ьоо1  ехр>;

■     как параметр <proto  tuple> или как выражение <ехр> (или операнд с выраже нием <ехр>) в параметре <proto  tuple>.

<range attribute ref>

::=   <range var  name>  .   <attribute name>

AS   <ttribute name>  ]

Параметр <range attribute ref> может использоваться как параметр <ехр>, но только в определенных контекстах, а именно:

■     как операнд параметра <bool  ехр>;

как параметр <proto  tuple> или как выражение <ехр> (или операнд с выражением <ехр>) в параметре <proto  tuple>.

<bool   exp>

::= … все обычные варианты,

наряду с | <quantified bool exp>

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

1  Мы не приводим  здесь подробного  описания  параметра  < tuple exp>, полагая,  что общее  представление о нем можно получить, изучая примеры. Но по причинам, которые в данном случае не имеют большого значения, здесь используется немного иной синтаксис по сравнению с предыдущими  главами.

■     Параметр <bool   ехр> присутствует непосредственно в выражении <relation op inv> (т.е. параметр <bоо1  ехр> следует сразу за ключевым словом WHERE).

■     Ссылка (обязательно свободная) именно на ту же самую переменную области зна чений непосредственно присутствует в значении выражения <proto   tuple>, непосредственно содержащегося в том же выражении <relation    op   inv> (т.е. параметр <proto   tuple> находится непосредственно перед ключевым сло вом WHERE).

Примечание по терминологии. В контексте реляционного исчисления (в версии исчисления доменов или исчисления кортежей) логические выражения <Ъоо1  ехр> часто называют правильно построенными формулами (Well-Formed Formula — WFF, что произносится как "вэфф"). Далее мы также будем часто пользоваться этой терминологией.

<quantified bool   exp>

::= <quantifier>  <range var name>  (  <bool  exp>  )

<quantifier>

::= EXISTS | FORALL

<relation  op inv>

::=   <proto  tuple>  [  WHERE  <bool  exp>  ]   !

В  реляционной  алгебре,  рассмотренной  в  главе  7,  параметр  <relation  op  inv> представлял собой одну из форм параметра <relation exp>, однако здесь, как уже было указано, он определяется иначе.

<proto   tuple>

::  …   определение   см.   в   тексте данной главы

Все ссылки на переменные области значений, помещенные непосредственно в значение параметра <proto tuple>, должны быть свободными в пределах данного параметра

<proto   tuple>.

Примечание. Выражение <proto tuple> является сокращением от "prototype tuple"

{кортеж-прототип); Этот термин — удачный, но не стандартный.

Переменные области значений

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

RANGEVAR SX RANGES OVER S

; RANGEVAR SY RANGES OVER S ; RANGEVAR SPX RANGES OVER SP ; RANGEVAR SPY RANGES OVER SP ; RANGEVAR PX RANGES OVER P ;

RANGEVAR SU RANGES OVER

( SX WHERE SX.CITY = ‘London’ ) ,

( SX WHERE EXISTS SPX ( SPX.S# = SX.S# AND SPX.P# = P# (‘P1′) ) ) ;

В последнем примере переменная области значений SU принимает значения из объединения множества кортежей поставщиков, находящихся в Лондоне, и множества кортежей поставщиков детали с номером Р1. Обратите внимание, что в определении переменной области значений SU используются переменные  области значений sx и SPX. Следует также отметить, что в подобных определениях переменных, основанных на объединении отношений,  объединяемые отношения, безусловно, должны быть совместимыми по типу.

Примечание. Переменные области значений не являются переменными в  обычном смысле (как в языках программирования); они являются переменными  в логическом

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

представляют именно кортежи.

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

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

По теме:

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