Главная » SQL, Базы данных » ОРИГИНАЛЬНАЯ АЛГЕБРА СИНТАКСИС

0

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

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

<relation  ехр>

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

<relation  op  inv> j  <with exp>

|   <introduced name> |   (

<relation exp>  )

Здесь <relation exp> — это выражение, которое обозначает отношение (т.е.  значение отношения). Первый формат— это вызов селектора отношения (см. главу 6); в этом разделе синтаксис выражения кортежа < tuple exp> подробно не рассматривается, поскольку  для  получения  общего  представления  о  нем  достаточно  ознакомиться  с несколькими примерами. Форматы с применением имени отношения <relvar name> и

Глава 7. Реляционная алгебра                                        247 выражения отношения {<relation  exp>) говорят сами за себя; остальные форматы описаны ниже.

<relation  op inv>

::=  <project>  |  <nonproject>

Вызов реляционного оператора <relation op inv> представляет собой либо  оператор проекции, <project>, либо оператор, отличный от проекции, <nonproject>.

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

<project>

::= <relation exp>

{ [ ALL BUT ] <attribute name comnalist> }

Здесь выражение <relation exp> не должно принадлежать к типу <nonproject>.

<nonproject>

::= <rename>  |  <union>  \  <intersect>  \  <minus>  \

<times>

|  <where>  |  <join>  \

<divide> <rename>

: :   <relation  exp> RENAME  (  <renaming cowmalist>  )

Здесь  <relation  exp>  также  не  должно  принадлежать  к  типу  <nonproject>. Отдельные операции переименования <renaming> выполняются в той последовательности,  в  какой  они  записаны  (для  ознакомления  с  синтаксисом  переименования

<renaming> просмотрите примеры, приведенные в предыдущем разделе). Если  разделенный запятыми список commalist содержит только один оператор  <renaming>, круглые скобки могут быть опущены.

<union >

::=  <relation  ехр> UNION <relation  exp>

Здесь  выражения  <relation  exp>  также  не  должны  принадлежать  к   типу

<nonproject>, за исключением того случая, когда одно из них или оба  относятся к другому выражению <ип±оп>.

<intersect>

::=   <relation  exp>  INTERSECT  <relation  exp>

Здесь  выражения  <relation  exp>  также  не  должны  принадлежать  к   типу

<nonproject>, за исключением того случая, когда одно из них или оба  относятся к другому выражению <intersect>.

<minus>

::= <relation exp> MINUS <relation exp>

Здесь  выражения   <relation    exp>   также   не  должны   принадлежать   к  типу

<nonproject>.

<times>

::= <relation exp> TIMES <relation exp>

Здесь   выражения   <relation   exp>   также   не   должны   принадлежать   к   типу

<nonproject>, за исключением того случая, когда одно из них или оба  относятся к другому выражению < times>.

<where>

::= <relation exp> WHERE <bool exp>

Здесь выражение <relation exp> не должно принадлежать к типу <nonproject>. Выражение <Ъоо1 ехр> может включать ссылки на атрибуты  отношения, обозначенного как <relation exp>, с очевидной семантикой.

<join>

::<relation exp> JOIN <relation exp>

Выражения <relation exp> не должны принадлежать к типу <nonproject>, если не считать того, что одно или оба из них могут представлять собой еще одно выражение типа <joi.n>.

<divide>

::= <relation exp> DIVIDEBY <relation exp> PER <per>

Выражение <relation exp> не должно принадлежать к типу<попрrоjеct>.

<реr>

: : =    <relation exp>  |    (   <relation  exp>,  <relation exp>  )

Выражение <relation exp> не должно принадлежать к типу<nonprojеct>.

<with exp>

::= WITH <name intro commalist> : <exp> ;

Выражения с ключевым словом WITH, <wi th exp>, которые в основном интересуют нас в этой книге, являются именно реляционными выражениями и поэтому они обсуждаются в данной главе. Но поддерживаются также скалярные выражения <wi th exp> и выражения с кортежами; фактически любая конкретная конструкция <wi th exp> представляет собой <relation exp>, <tuple exp>  или <scalar exp> в соответствии с тем, относится ли, в свою очередь, выражение <ехр>, стоящее после двоеточия, к типу

<relation exp>, < tuple exp> или <scalar exp>. Во всех случаях отдельные операторы введения имен <name intro> выполняются в той последовательности, в какой они записаны, и семантика выражения <with exp> определяется как совпадающая с той версией <ехр>, где каждое вхождение каждого введенного имени заменяется ссылкой на переменную, значение  которой является результатом вычисления соответствующего выражения.

Примечание. WITH в действительности не является оператором реляционной алгебры как таковым; это ключевое слово служит просто средством формирования выражений, которые без его использования становились бы довольно сложными (особенно если они включают общие подвыражения). Несколько примеров приведено в разделе 7.5.

<name intrc»

::= <ехр> AS <introduced name>

Здесь введенное имя <introduced name> может использоваться в  содержащем  его выражении <wi th exp> везде, где допускается применение выражения <ехр> (в случае необходимости заключенного в круглые скобки).

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

По теме:

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