Синтаксис реляционной алгебры

Сейчас самое время ввести конкретный синтаксис для операций реляционной алгебры (см. BNF-грамматику на рис. 6. 2). Обратите внимание, что синтаксис не рассматривается в качестве серьезного кандидата для языка конечного пользователя, он не особенно дружественный, а используется как надежная основа для обсуждения операторов в оставшейся части главы и, конечно, его можно было бы сделать более дружественным с помощью соответствующего «синтаксического сахара». И действительно, несколько позже в этой главе будут предложены наши собственные простые усовершенствования.

expession

::= monadic- expression I dyadic- expression

monadic- expression

::= renaming I restriction I projection

renaming

::= term RENAME attribute AS attribute

term

::= relation I (expression)

restriction

::= term WHERE condition

projection

::= term I term [ attribute-commalist ]

dyadic- expression

::= projection dyadic-operation expression

dyadic- operation

::= UNION I INTERSECT I MINUS I TIMES I JOIN I DIVIDERY

Рис. 6. 2. BNF-грамматика для реляционной алгебры

Несколько замечаний по грамматике

1. В главе 4 приводилось объяснение условным объяснениям типа «commalist» (что означает список, разделенный запятыми).

2. Обозначения relation (отношение) и attribute (атрибут) определяются как идентификаторы, которые представляют собой соответственно имя отношения и имя атрибута.

3. Объяснение обозначения condition (условие) приводится ниже в этой главе.

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

(S RENAME CITY AS SCITY) RENAME S# AS SNUM

Как указывалось ранее, внутреннее выражение служит для вычисления отношения с телом, таким же как и у отношения S, но имеющим атрибут города с именем SCITY, а не CITY; а общее выражение — соответственно для вычисления отношения с таким же телом, но дополнительно с измененным именем атрибута номера поставщика S# на SNUM. Чтобы можно было переименовать несколько атрибутов за один раз, не исполь­зуя многоуровневые вложенные выражения, вводится расширенная версия оператора rename, в которой предыдущий пример будет выглядеть следующим образом:

(S RENAME CITY AS SCITY, S# AS SNUM)

Иными словами, другой допустимый синтаксис для этой синтаксической катего­рии переименования таков:

(termRENAME rename-commalist)

Здесь обозначение commaiist (как указывалось выше) означает список через запятую, а rename означает, что каждый из элементов этого списка представляет собой выражение attribute AS attribute


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: