Реляционная алгебра в базах данных кратко

Обновлено: 05.07.2024

Реляционная алгебра в сравнении с реляционным исчислением позволяет более наглядно описать действия, которые выполняются над отношениями.

Языки запросов на основе реляционной алгебры не получили широкого распространения в современных СУБД. Знание реляционной алгебры необходимо для того, чтобы понять суть реляционных операций, которые используют другие языки.

Коддом был предложен вариант реляционной алгебры, который содержит основные операции объединения, разности (вычитания), пересечения, декартова (прямого) произведения (или просто произведения), выборки (селекции, ограничения), проекции, деления и соединения.

На рисунке 1 представлено графическое представление названных операций.

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

Реляционная алгебра, предложенная Коддом, имеет несколько недостатков:

  1. Перечисленные операции являются избыточными, т.к. минимально необходимым набором являются 5 операций: операция объединения, вычитания, произведения, проекции и выборки. Остальные 3 операции (пересечения, соединения и деления) можно представить в виде комбинации пяти минимально необходимых. К примеру, соединение является проекцией выборки произведения.
  2. Названных операций недостаточно для возможности построения реальной системы построения БД, основанной на принципах реляционной алгебры. Необходимы расширения, которые включают операции переименования атрибутов, создания новых вычисляемых атрибутов, нахождения итоговых функций, составления сложных алгебраических выражений, сравнения, присвоения и т.д.

Готовые работы на аналогичную тему

Операции реляционной алгебры Кодда

Операции реляционной алгебры Кодда делятся на 2 группы:

  1. Базовые теоретико-множественные – включают классические операции теории множеств: объединения, разности, пересечения и произведения.
  2. Специальные реляционные – включают операции проекции, селекции, деления и соединения.

Операции реляционной алгебры могут быть унарными – выполненными над одним отношением (к примеру, проекция), и бинарными – выполненными над двумя отношениями (к примеру, разность).

Отношения, над которыми выполняется бинарная операция, должны быть совместимыми по структуре.

Под совместимостью структур отношений понимается совместимость типов соответствующих доменов и имен атрибутов.

Частный случай совместимости – совпадение (идентичность).

Объединение

Отношение $R$ является объединением ($R1 UNION R2$) двух совместимых отношений одинаковой размерности $R1$ и $R2$, если оно содержит все элементы исходных отношений, исключая повторения.

Пусть отношение $R1$ является множеством поставщиков из Парижа, а отношение $R2$ – множеством поставщиков, выпускающих деталь $D1$. Тогда отношением $R$ будут поставщики, которые находятся в Париже, поставщики, которые выпускают деталь $D1$, или те и другие.

Вычитание

Отношение $R$ является вычитанием ($R1 MINUS R2$) совместимых отношений одинаковой размерности $R1$ и $R2$, если оно содержит множество кортежей, которые принадлежат $R1$, но не принадлежат отношению $R2$.

Для отношений $R1$ и $R2$ из рассмотренного примера отношение $R$ будет являться множеством поставщиков, которые находятся в Париже, но не выпускают деталь $D1$, то есть $R=<(D4, Николай, 20, Париж)>$.

Обратим внимание, что выполнение вычитания зависит от порядка следования операндов, то есть результаты выполнения операций $R2 MINUS R1$ и $R1 MINUS R2$ будут разными.

Пересечение

Отношение $R$ является пересечением ($R1 INTERSECT R2$) двух совместимых отношений одинаковой размерности $R1$ и $R2$, если оно содержит кортежи, которые одновременно принадлежат обоим исходным отношениям.

Отношение $R$ для отношений $R1$ и $R2$ будет состоять из всех производителей из Парижа, которые выпускают деталь $D1$. Таким образом, отношение $R$ содержит единственный элемент $(D1, Сергей, 20, Париж)$.

Произведение

Произведением ($R1 TIMES R2$) отношения $R1$ степени $s1$ и отношения $R2$ степени $s2$, которые не содержат одинаковые имена атрибутов, является такое отношение $R$ степени $(s1+s2)$, которое имеет заголовок в виде сцепления заголовков отношений $R1$ и $R2$ и содержит кортежи, первые $s1$ элементов кортежей из которых принадлежат множеству $R1$, а следующие $s2$ элементов принадлежат множеству $R2$.

Выборка

Выборкой ($R WHERE f$) отношения $R$ по формуле $f$ является новое отношение, которое имеет такой же заголовок, и тело, состоящее из кортежей отношения $R$, удовлетворяющих истинности логического выражения, которое задано формулой $f$.

При записи формулы используют операнды – имена атрибутов (можно номера столбцов), логические операции (NOT – НЕ, OR – ИЛИ, AND – И), константы, скобки и операции сравнения.

Проекция

Проекцией отношения $R$ на атрибуты $А, В, С, \cdots (R [А, В, С, \cdots])$, где множество $$ – подмножество полного списка атрибутов заголовка отношения $R$, является отношение с заголовком $А, В, С, \cdots$ и телом, которое содержит кортежи отношения $R$ без повторяющихся кортежей.

Наличие одинаковых атрибутов в списке $А, В, С, \cdots$ недопустимо.

Деление

Отношение $R$ является делением ($R1 DIVIDEBY R2$) отношения $R1$ с атрибутами $А$ и $В$ на отношение $R2$ с атрибутом $В$ ($А$ и $В$ могут быть простыми или составными атрибутами, $В$ – общий атрибут, который определен на одном и том же домене), если оно имеет заголовок $А$ и тело, состоящее из кортежей $r$ таких, что отношение $R1$ содержит кортежи $(r, s)$, к тому же множество значений $s$ содержит множество значений атрибута $В$ отношения $R2$.

Соединение

Отношение $R$ является соединением $Cf(R1, R2)$ отношений $R1$ и $R2$ по заданному формулой $f$ условию, если его можно получить с помощью декартова произведения отношений $R1$ и $R2$ с применением к полученному результату операции выборки по формуле $f$.

Иначе говоря, соединение отношения $R1$ по атрибуту $Х$ с отношением $R2$ по атрибуту $Y$ (отношения не могут иметь общие имена атрибутов) является результатом выполнения операции вида:

$(R1 TIMES R2) WHERE X Q Y$,

где $Q$ является логическим выражением над атрибутами, которые определены на одном (в случае составного атрибута – на нескольких) домене. Дейтом были предложены дополнительные операции реляционной алгебры, к которым относятся: переименование, расширение, подведение итогов, присвоение, вставка, обновление, удаление, сравнение.

Пример того, как можно комбинировать оператор выборки и проекции. Выберем id студентов с gpa > 3.7:

2.3 Оператор переименования

Как следует из названия оператор переименования позволяет переименовывать атрибуты отношений. Оператор переименования является унарным оператором и имеет следующую форму:

где new - новое название атрибута, original - старое название атрибута. Например для отношения:

Получим новое отношение с переименованными атрибутами:

Далее на примерах мы поймем почему данный оператор так важен.

3.1 Декартово произведение

Декартово произведение служит для комбинации двух отношений. Данный оператор берет два отношения создавая пары всех возможных комбинаций кортежей. Декартово произведение требует, чтобы у кортежей комбинируемых отношений было уникальное название атрибутов, в противном случае необходимо переименовывать атрибуты оператором переименования, который мы рассмотрели ранее. Например, два отношения:

имеют общие атрибуты Id. Запрос можно выразить следующим образом, что бы избавиться от дубликатов атрибутов:

в результате получим отношение:

Декартово произведение в нашем случае является бинарным оператором, поэтому для соединения более двух отношении необходимо использовать скобки.

$$ Person \times (Employee \times Parking) $$

Само по себе декартово произведение не так полезно, если его не использовать с другими операторами.

Например, мы хотим получить место парковки Боба. Для этого используя декартово произведение можно применить оператор выборки на сравнение EmployeeId и ParkingId к результату полученного отношения:

В результате получим отношение

3.2 Естественное соединение

Естественное соединение использует декартово произведение, но позволяет обеспечить сравнение значений всех атрибутов с одинаковым названием по умолчанию, а также устранить дубликаты атрибутов:

$$ Employee \bowtie Parking $$

Пример решения задачи отображения места парковки Боба используя оператор естественного соединения:

3.3 Тета соединение

Тета соединение, так же как и естественное соединение является всего лишь сокращенной записью оператора выборки и декартова произведения. Тета - это контекст, в который передается условное выражения вместо оператора выборки:

В большинстве реляционных базах данных в качестве оператора JOIN используется именно тета соединение.

Для наглядности мы можем переписать наш предыдущий запрос получения места парковки Боба используя тета соединение:

4.1 Оператор объединения

Все операторы, которые были описаны выше используются для объединения кортежей таблиц по горизонтали. А что если необходимо объединить в один список значения из разных таблиц? Для этого удобнее всего будет воспользоваться оператором объединения. Например, можно объединить столбцы Id отношений Parking и Employee:

$$\pi_Employee \cup \pi_Parking$$

Оператор объединения ожидает, что типы объединяемых столбцов, их название и их количество должно быть одинаковым. Для объединения столбцов с разными названиями можно воспользоваться оператором переименования:

4.2 Оператор разности

Оператор разности для отношений работает так же как и для множеств, так как отношения являются сами по себе множествами, как мы рассмотрели ранее.

Например, нам нужно получить список свободных парковочных мест. Для этого мы можем применить оператор разности между отношениями Employee и Parking:

$$\pi_ Parking - \pi_ Employee$$

Но данный запрос в качестве результата покажет только Id парковочных мест. Что если мы хотели бы показать еще и номера свободных парковочных мест? Мы не можем добавить в контекст проекции атрибут Space, так как это исказит наше множество. Для этого мы можем применить естественное соединение к полученному результату из множества Id свободных парковочных мест:

$$ \pi_ ((\pi_Parking - \pi_Employee) \bowtie Parking) $$

4.3 Пересечение

Оператор пересечения возвращает общие элементы двух множеств. Пересечение множеств можно представить в виде равенства:

Реляционная алгебра т.е. алгебраическое изображение, в котором запросы выражаются с помощью специальных операторов отношений.

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

Реляционная алгебра была представлена E. F. Codd в 1972 году. Она состоит из множества операций над отношениями:

ВЫБОРКА(SELECT) (σ): извлечь кортежи из отношения, которые удовлетворяют заданным условиям. Пусть R - таблица, содержащая атрибут A . σ A=a (R) = где t обозначает кортеж R и t(A) обозначает значение атрибута A кортежа t .

ПРОЕКЦИЯ(PROJECT) (π): извлечь заданные атрибуты (колонки) из отношения. Пусть R отношение, содержащее атрибут X . π X ( R ) = , где t ( X ) обозначает значение атрибута X кортежа t .

ПРОИЗВЕДЕНИЕ(PRODUCT) (×): построить декартово произведение двух отношений. Пусть R - таблица, со степенью k 1 и пусть S таблица со степенью k 2 . R × S - это множество всех k 1 + k 2 - кортежей, где первыми являются k 1 элементы кортежа R и где последними являются k 2 элементы кортежа S .

ОБЪЕДИНЕНИЕ(UNION) (∪): построить теоретико-множественное объединение двух таблиц. Даны таблицы R и S (обе должны иметь одинаковую степень), объединение R ∪ S - это множество кортежей, принадлежащих R или S или обоим.

ПЕРЕСЕЧЕНИЕ(INTERSECT) (∩): построить теоретико-множественное пересечение двух таблиц. Даны таблицы R и S , R ∪ S - это множество кортежей, принадлежащих R и S . Опять необходимо, чтобы R и S имели одинаковую степень.

ВЫЧИТАНИЕ(DIFFERENCE) (− или ∖): построить множество различий двух таблиц. Пусть R и S опять две таблицы с одинаковой степенью. R - S - это множество кортежей R ,не принадлежащих S .

СОЕДИНЕНИЕ(JOIN) (∏): соединить две таблицы по их общим атрибутам. Пусть R будет таблицей с атрибутами A , B и C и пусть S будет таблицей с атрибутами C , D и E . Есть один атрибут, общий для обоих отношений, атрибут C . R ∏ S = π R.A,R.B,R.C,S.D,S.E (σ R.C=S.C (R × S)). Что же здесь происходит? Во-первых, вычисляется декартово произведение R × S . Затем, выбираются те кортежи, чьи значения общего атрибута C эквивалентны (σ R.C = S.C ). Теперь мы имеем таблицу, которая содержит атрибут C дважды и мы исправим это, выбросив повторяющуюся колонку.

Пример 2-2. Внутреннее соединение

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

R A | B | C S C | D | E ---+---+--- ---+---+--- 1 | 2 | 3 3 | a | b 4 | 5 | 6 6 | c | d 7 | 8 | 9

Во-первых, мы вычислим декартово произведение R × S и получим:

R x S A | B | R.C | S.C | D | E ---+---+-----+-----+---+--- 1 | 2 | 3 | 3 | a | b 1 | 2 | 3 | 6 | c | d 4 | 5 | 6 | 3 | a | b 4 | 5 | 6 | 6 | c | d 7 | 8 | 9 | 3 | a | b 7 | 8 | 9 | 6 | c | d

После выборки σ R.C=S.C (R × S) получим:

A | B | R.C | S.C | D | E ---+---+-----+-----+---+--- 1 | 2 | 3 | 3 | a | b 4 | 5 | 6 | 6 | c | d

Удалить повторяющуюся колонку S . C можно с помощью проекции следующей операцией: π R.A,R.B,R.C,S.D,S.E (σ R.C=S.C (R × S)) и получим:

A | B | C | D | E ---+---+---+---+--- 1 | 2 | 3 | a | b 4 | 5 | 6 | c | d

ДЕЛЕНИЕ(DIVIDE) (÷): Пусть R будет таблицей с атрибутами A, B, C, и D и пусть S будет таблицей с атрибутами C и D. Мы можем определить деление как: R ÷ S = где t r (x,y) означает кортеж таблицы R , который состоит только из элементов x и y . Заметим, что кортеж t состоит только из элементов A и B отношения R .

Зададим следующие таблицы

R A | B | C | D S C | D ---+---+---+--- ---+--- a | b | c | d c | d a | b | e | f e | f b | c | e | f e | d | c | d e | d | e | f a | b | d | e

R ÷ S получается

A | B ---+--- a | b e | d

Более подробное описание и определение реляционной алгебры смотри у [ Ullman, 1988 год ] или [ Дейта, 1994 год ].

Пример 2-3. Запрос с использованием реляционной алгебры

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

π SUPPLIER.SNAME (σ PART.PNAME='Screw' (SUPPLIER ∏ SELLS ∏ PART))

Мы назовём такую операцию запросом. Если мы применим, приведённый выше запрос к таблицам нашего примера ( База данных поставщиков и деталей ), то получим следующий результат:

SNAME ------- Smith Adams

Реляционное исчисление основано на логике первого порядка . Если два варианта реляционного исчисления:

The Исчисление доменов ( DRC ), где переменными являются элементы (атрибуты) кортежа.

The исчисление кортежей ( TRC ), где переменными являются кортежи.

Мы хотим обсудить исчисление кортежей потомучто оно лежит в основе большинства реляционных языков. Подробное обсуждение DRC (и также TRC ) смотри у [ Дейта, 1994 год ] или [ Ullman, 1988 год ].

Запросы, использующие TRC , представлены в следующем виде: x(A) ∣ F(x) где x - это переменная кортежа, A - это множество атрибутов и F - формула. Результирующие отношение состоит из всех кортежей t(A) , которые удовлетворяют F(t) .

Реляционная алгебра и реляционное исчисление имеют одинаковую выражающую мощность ; т.е. все запросы, которые можно сформулировать с помощью реляционной алгебры, могут быть также сформулированы с помощью реляционного исчисления и наоборот. Первым это доказал E. F. Codd в 1972 году. Это доказательство основано на алгоритме (“алгоритм редукции Кодда”) по которому произвольное выражение реляционного исчисления может быть сокращено до семантически эквивалентного выражения реляционной алгебры. Более подробное обсуждение смотри у [ Дейта, 1994 год ] и [ Ullman, 1988 год ].

Иногда говорят, что языки, основанные на реляционном исчислении "высокоуровневые" или "более описательные", чем языки, основанные на реляционной алгебре, потому что алгебра (частично) задаёт порядок операций, тогда как исчисление оставляет компилятору или интерпретатору определять наиболее эффективный порядок вычисления.

Аннотация: В предыдущей лекции упоминались три составляющих реляционной модели данных. Две из них – структурную и целостную части – мы рассмотрели более или менее подробно, а манипуляционной части реляционной модели данных посвящается эта и следующие две лекции. Мы уделяем данной теме такое большое внимание, поскольку понимание формальных механизмов манипулирования реляционными данными исключительно важно для понимания технологии баз данных вообще. В этой лекции после небольшого введения будет рассмотрен вариант реляционной алгебры, предложенный Кристофером Дейтом около 15 лет тому назад. Мне этот вариант алгебры кажется наиболее понятным, хотя предлагаемый набор операций несколько избыточен. В следующей лекции мы обсудим новый "минимальный" вариант алгебры, предложенный Дейтом и Дарвеном в конце 1990-х гг. Возможно, новая алгебра не очень практична, но зато красива и элегантна. После этого в лекции 5 мы перейдем к реляционному исчислению, достаточно подробно рассмотрим один из вариантов реляционного исчисления кортежей и кратко обсудим особенности исчисления доменов.

Введение

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

Все эти механизмы обладают одним важным свойством: они замкнуты относительно понятия отношения. Это означает, что выражения реляционной алгебры и формулы реляционного исчисления определяются над отношениями реляционных БД и результатом их "вычисления" также являются отношения (конечно, здесь имеются в виду значения-отношения). В результате любое выражение или формула могут интерпретироваться как отношения, что позволяет использовать их в других выражениях или формулах.

Как мы увидим, алгебра и исчисление обладают большой выразительной мощностью: очень сложные запросы к базе данных могут быть выражены с помощью одного выражения реляционной алгебры или одной формулы реляционного исчисления . Именно по этой причине такие механизмы включены в реляционную модель данных . Конкретный язык манипулирования реляционными БД называется реляционно-полным , если любой запрос, формулируемый с помощью одного выражения реляционной алгебры или одной формулы реляционного исчисления , может быть сформулирован с помощью одного оператора этого языка.

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

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

Поскольку механизмы реляционной алгебры и реляционного исчисления эквивалентны, в конкретной ситуации для проверки степени реляционности некоторого языка БД можно пользоваться любым из этих механизмов.

Заметим, что крайне редко алгебра или исчисление принимается в качестве полной основы какого-либо языка БД . Обычно (например, в случае языка SQL ) язык основывается на некоторой смеси алгебраических и логических конструкций. Тем не менее знание алгебраических и логических основ языков баз данных часто применяется на практике.

Для экономии времени и места мы не будем вводить какие-либо строгие синтаксические конструкции, а в основном ограничимся рассмотрением материала на содержательном уровне.

Обзор реляционной алгебры Кодда

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

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

  • объединения отношений ;
  • пересечения отношений ;
  • взятия разности отношений ;
  • взятия декартова произведения отношений .

Специальные реляционные операции включают:

  • ограничение отношения ;
  • проекцию отношения ;
  • соединение отношений ;
  • деление отношений .

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

Общая интерпретация реляционных операций

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

  • При выполнении операции объединения ( UNION ) двух отношений с одинаковыми заголовками производится отношение, включающее все кортежи, которые входят хотя бы в одно из отношений-операндов.
  • Операция пересечения ( INTERSECT ) двух отношений с одинаковыми заголовками производит отношение, включающее все кортежи, которые входят в оба отношения-операнда.
  • Отношение, являющееся разностью ( MINUS ) двух отношений с одинаковыми заголовками, включает все кортежи, входящие в отношение-первый операнд, такие, что ни один из них не входит в отношение, которое является вторым операндом.
  • При выполнении декартова произведения ( TIMES ) двух отношений, пересечение заголовков которых пусто, производится отношение, кортежи которого производятся путем объединения кортежей первого и второго операндов.
  • Результатом ограничения ( WHERE ) отношения по некоторому условию является отношение, включающее кортежи отношения -операнда, удовлетворяющее этому условию.
  • При выполнении проекции ( PROJECT ) отношения на заданное подмножество множества его атрибутов производится отношение, кортежи которого являются соответствующими подмножествами кортежей отношения -операнда.
  • При соединении ( JOIN ) двух отношений по некоторому условию образуется результирующее отношение, кортежи которого производятся путем объединения кортежей первого и второго отношений и удовлетворяют этому условию.
  • У операции реляционного деления ( DIVIDE BY ) два операнда – бинарное и унарное отношения. Результирующее отношение состоит из унарных кортежей, включающих значения первого атрибута кортежей первого операнда таких, что множество значений второго атрибута (при фиксированном значении первого атрибута) включает множество значений второго операнда.
  • Операция переименования ( RENAME ) производит отношение, тело которого совпадает с телом операнда, но имена атрибутов изменены.
  • Операция присваивания ( := ) позволяет сохранить результат вычисления реляционного выражения в существующем отношении БД.

Поскольку результатом любой реляционной операции (кроме операции присваивания , которая не вырабатывает значения) является некое отношение, можно образовывать реляционные выражения, в которых вместо отношения-операнда некоторой реляционной операции находится вложенное реляционное выражение. В построении реляционного выражения могут участвовать все реляционные операции , кроме операции присваивания . Вычислительная интерпретация реляционного выражения диктуется установленными приоритетами операций:

RENAME >= WHERE = PROJECT >= TIMES = JOIN = INTERSECT = DIVIDE BY >= UNION = MINUS

В другой форме приоритеты операций показаны на рис. 3.1. Вычисление выражения производится слева направо с учетом приоритетов операций и скобок.

Замкнутость реляционной алгебры и операция переименования

Как мы отмечали в предыдущей лекции, каждое значение-отношение характеризуется заголовком (или схемой) и телом (или множеством кортежей). Поэтому, если нам действительно нужна алгебра , операции которой замкнуты относительно понятия отношения, то каждая операция должна производить отношение в полном смысле, т. е. оно должно обладать и телом, и заголовком. Только в этом случае можно будет строить вложенные выражения.

Заголовок отношения представляет собой множество пар . Если посмотреть на общий обзор реляционных операций, приведенный в предыдущем подразделе, то видно, что домены атрибутов результирующего отношения однозначно определяются доменами отношений-операндов. Однако с именами атрибутов результата не всегда все так просто.

Например, представим себе, что у отношений-операндов операции декартова произведения имеются одноименные атрибуты с одинаковыми доменами. Каким был бы заголовок результирующего отношения? Поскольку это множество, в нем не должны содержаться одинаковые элементы. Но и потерять атрибут в результате недопустимо. А это значит, что в таком случае вообще невозможно корректно выполнить операцию декартова произведения.

Аналогичные проблемы могут возникать и в случаях других двуместных операций. Для разрешения проблем в число операций реляционной алгебры вводится операция переименования . Ее следует применять в том случае, когда возникает конфликт именования атрибутов в отношениях-операндах одной реляционной операции . Тогда к одному из операндов сначала применяется операция переименования , а затем основная операция выполняется уже без всяких проблем. Более строго мы определим операцию переименования в следующей лекции, а пока лишь заметим, что результатом этой операции является отношение, совпадающее во всем с отношением-операндом, кроме того, что имя указанного атрибута изменено на заданное имя.

В дальнейшем изложении мы будем предполагать применение операции переименования во всех конфликтных ситуациях.

Читайте также: