create base relation (см. главу 4). Ну а как же для производных отношений?
Рассмотрим, например, выражение
S JOIN P,
которое представляет соединение отношения поставщиков и отношения
деталей по соответствующим городам (значение атрибута CITY общее для двух
отношений). Что будет заголовком для результата этого соединения? Обязательное
наличие заголовка диктуется замкнутостью, а системе должно быть известно, что
это такое (это в равной степени необходимо и пользователю, как мы скоро увидим).
Поэтому, если рассматривать замкнутость более строго, каждая реляционная
операция должна быть определена таким образом, чтобы выдавать результат с
надлежащим заголовком (т.е. с соответствующим набором необходимых имен
атрибутов). Причина такого требования к результирующим отношениям
заключается в необходимости иметь возможность обращаться к именам атрибутов
в последующих операциях, например в дальнейших операциях, расположенных на
более глубоких уровнях вложенного выражения. Мы не могли бы, например, даже
записать такое выражение, как
(S JOIN P) WHERE WEIGHT > 18,
если бы не знали, что результат вычисления выражения s join p имеет атрибут
WEIGHT. Другими словами, необходим такой набор правил наследования имен
атрибутов, встроенный в алгебру, чтобы можно было предсказывать имена
атрибутов на выходе произвольной реляционной операции, зная имена атрибутов на
входе этой операции. Задав такие правила для всех операций, можно гарантировать,
что для выражения любой сложности будет вычисляться результат, имеющий
вполне определенный набор атрибутов.
Прежде чем двигаться дальше, отметим, что этот аспект алгебры, как правило,
недооценивается в литературе, кроме двух заметных работ — Холла (Hall) и др.
[6.9] и Дарвена (Darwen) [4.7]. Версия алгебры, представленная в этой главе, была
выбрана в значительной мере под влиянием работы Дарвена. (В более ранних
изданиях этой книги, обращаясь к проблеме наследования имен атрибутов, мы
использовали подход, который был значительно хуже предложенного Дарвеном.)
Наша версия реляционной алгебры определена таким образом, чтобы
гарантировать, что все отношения будут иметь правильные заголовки, т.е.
заголовки, в которых все атрибуты имеют правильные имена, уникальные в
содержащем их отношении. Для достижения этой цели необходим новый оператор
rename, предназначенный для переименования атрибутов в определенном
отношении. Точнее, для определенного отношения оператор rename возвращает (по
крайней мере концептуально) новую копию отношения, в котором некоторый
атрибут имеет другое заданное имя. (Определенное отношение, конечно, может
быть результатом вычисления выражения, включающего другие алгебраические
операции.) Например, можно написать:
S RENAME CITY AS SCITY
С помощью этого выражения (обратите внимание, что рассматриваемая запись
является выражением, а не командой или оператором, а значит, может быть