Реляционная алгебра

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

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

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

В процессе развития реляционной теории и практики было предложено несколько новых реляционных операций, например полусоединение (SEMI-JOIN) и полуразность, или анти-полусоединение (ANTI-SEMI-JOIN)[1][2], CROSS APPLY и OUTER APPLY, транзитивное замыкание (TCLOSE) и др.

Поскольку многие операции выразимы друг через друга, в составе реляционной алгебры можно выделить несколько вариантов базиса (набора операций, через который выразимы все остальные). Наиболее известный и строго определённый базис (алгебра А) предложен Кристофером Дейтом и Хью Дарвеном[3].

Реляционная алгебра и реляционное исчисление эквивалентны по своей выразительной силе[4]. Существуют правила преобразования запросов между ними.

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

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

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

Операции над одним отношением называются унарными, над двумя отношениями — бинарными, над тремя — тернарными (таковые практически неизвестны).

Пример унарной операции — проекция, пример бинарной операции — объединение.

N-арную реляционную операцию f можно представить функцией, возвращающей отношение и имеющей n отношений в качестве аргументов:

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

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

Ограничения на операции[править | править код]

Некоторые реляционные операции, в частности, операции объединения, пересечения и вычитания, требуют, чтобы отношения имели совпадающие (одинаковые) заголовки (схемы). Это означает, что совпадают количество атрибутов, названия атрибутов и тип (домен) одноимённых атрибутов.

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

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

Операции реляционной алгебры[править | править код]

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

Переименование[править | править код]

Результатом применения операции переименования атрибутов является отношение с изменёнными именами атрибутов.

Синтаксис:

R RENAME Atr1, Atr2, … AS NewAtr1, NewAtr2,

где

R — отношение
Atr1, Atr2, … — исходные имена атрибутов
NewAtr1, NewAtr2, … — новые имена атрибутов.

Объединение[править | править код]

Диаграмма Венна для (объединение).

Отношение с тем же заголовком, что и у совместимых по типу отношений A и B, и телом, состоящим из кортежей, принадлежащих или A, или B, или обоим отношениям.
Синтаксис:

A UNION B

Пересечение[править | править код]

Диаграмма Венна для (пересечение).

Отношение с тем же заголовком, что и у отношений A и B, и телом, состоящим из кортежей, принадлежащих одновременно обоим отношениям A и B.
Синтаксис:

A INTERSECT B

Вычитание[править | править код]

Диаграмма Венна для (вычитание).

Отношение с тем же заголовком, что и у совместимых по типу отношений A и B, и телом, состоящим из кортежей, принадлежащих отношению A и не принадлежащих отношению B.
Синтаксис:

A MINUS B

Операция присваивания[править | править код]

Операция присваивания (:=) позволяет сохранить результат вычисления реляционного выражения в существующем отношении.

Декартово произведение[править | править код]

Отношение, заголовок (A1, A2, …, An, B1, B2, …, Bm) которого является сцеплением заголовков отношений A(A1, A2, …, An) и B(B1, B2, …, Bm), а тело состоит из кортежей, являющихся всеми вариантами сцеплений кортежей отношений A и B: (a1, a2, …, an, b1, b2, …,bm),

таких, что

(a1, a2, …, an) ∈ A,
(b1, b2, …, bm) ∈ B.

Синтаксис:

A TIMES B

Выборка (ограничение)[править | править код]

Отношение с тем же заголовком, что и у отношения A, и телом, состоящим из кортежей, значения атрибутов которых при подстановке в условие c дают значение ИСТИНА. c представляет собой логическое выражение, в которое могут входить атрибуты отношения A и/или скалярные выражения.
Синтаксис:

A WHERE c

Выборка записывается как или где:

  • a и b — имена атрибутов
  • θ — одна из бинарных операций
  • v — постоянная величина
  • R отношение

Проекция[править | править код]

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

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

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

Синтаксис:

A[X, Y, …, Z]

или

PROJECT A {x, y, …, z}

Соединение[править | править код]

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

Синтаксис:

(A TIMES B) WHERE P

Деление[править | править код]

Отношение с заголовком (X1, X2, …, Xn) и телом, содержащим множество кортежей (x1, x2, …, xn), таких, что для всех кортежей (y1, y2, …, ym) ∈ B в отношении A(X1, X2, …, Xn, Y1, Y2, …, Ym) найдется кортеж (x1, x2, …, xn, y1, y2, …, ym).

Синтаксис:

A DIVIDEBY B

Выразимость одних операций через другие[править | править код]

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

Оператор соединения

Оператор соединения определяется через операторы декартова произведения и выборки следующим образом:

(A TIMES B) WHERE X=Y
где X и Y атрибуты соответственно отношений A и B с первоначально равными именами.
Оператор пересечения

Оператор пересечения выражается через вычитание следующим образом:

A INTERSECT B = A MINUS (A MINUS B)
Оператор деления

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

A DIVIDEBY B = A[X] MINUS ((A[X] TIMES B) MINUS A)[X]

Реализации[править | править код]

Первым языком запросов, основанным на алгебре Кодда, был Alpha, разработанный самим Коддом. Впоследствии был создан ISBL, и эта новаторская работа была оценена многими авторитетными специалистами[5] как показывающая способ превратить идею Кодда в полезный язык. Business System 12 была недолговечной реляционной СУБД, которая последовала примеру ISBL.

В 1998 году Кристофер Дэйт и Хью Дарвен предложили язык под названием Tutorial D, предназначенный для использования в преподавании теории реляционных баз данных, этот язык запросов также был основан на идеях ISBL. Rel — это реализация Tutorial D.

Даже язык запросов SQL слабо основан на реляционной алгебре, хотя операнды в SQL (таблицы) это не совсем отношения, и несколько полезных теорем реляционной алгебры не выполняются в SQL (возможно, в ущерб оптимизаторам и/или пользователям). Модель таблицы SQL — это мультимножество, а не множество. Например, выражение  — это теорема реляционной алгебры на множествах, но не реляционной алгебры на мультимножествах; для изучения реляционной алгебры на мультимножествах см. главу 5 «Полного» учебника Гарсиа-Молины, Ульмана и Видома[6].

Примечания[править | править код]

  1. Introduction to Joins
  2. Дейт, Кристофер. SQL и реляционная теория. Как грамотно писать код на SQL. — Символ-Плюс, 2010
  3. К. Дейт, Хью Дарвен. Основы будущих систем баз данных. Третий манифест. М: Янус-К, 2004.
  4. Грей, 1989, с. 188.
  5. C. J. Date. Edgar F. Codd - A.M. Turing Award Laureate. amturing.acm.org. Дата обращения: 27 декабря 2020.
  6. Hector Garcia-Molina. Database systems: the complete book / Hector Garcia-Molina, Jeffrey D. Ullman, Jennifer Widom. — 2nd. — Pearson Prentice Hall, 2009. — ISBN 978-0-13-187325-4.

Литература[править | править код]

Ссылки[править | править код]