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

В теория баз данных, реляционная алгебра это теория, которая использует алгебраические структуры с обоснованная семантика для моделирования данных и определения запросов к ним. Теория была введена Эдгар Ф. Кодд.

Основное применение реляционной алгебры - обеспечение теоретической основы для реляционные базы данных особенно языки запросов для таких баз данных, главной из которых является SQL. Реляционные базы данных хранят табличные данные, представленные как связи. Запросы к реляционным базам данных часто также возвращают табличные данные, представленные как связи. Основная предпосылка реляционной алгебры - определить операторы, которые преобразуют одно или несколько входных отношений в выходное отношение. Учитывая, что эти операторы принимают отношения в качестве входных и создают отношения в качестве выходных, их можно комбинировать и использовать для выражения потенциально сложных запросов, которые преобразуют потенциально многие входные отношения (данные которых хранятся в базе данных) в одно выходное отношение (результаты запроса). . Унарные операторы принимают в качестве входных данных одно отношение; примеры включают операторы для фильтрации определенных атрибутов (столбцов) или кортежей (строк) из входного отношения. Бинарные операторы принимают на вход два отношения; такие операторы объединяют два входных отношения в одно выходное отношение, например, беря все кортежи, найденные в любом отношении, удаляя кортежи из первого отношения, найденного во втором отношении, расширяя кортежи первого отношения кортежами во втором отношении соответствие определенным условиям и т. д. Также могут быть включены другие более продвинутые операторы, где включение или исключение определенных операторов приводит к созданию семейства алгебр.

Введение

Реляционной алгебре уделялось мало внимания за пределами чистой математики до публикации Э. Ф. Кодд с реляционная модель данных в 1970 году. Кодд предложил такую ​​алгебру в качестве основы для языков запросов к базам данных. (См. Раздел Реализации.)

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

Установить операторы

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

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

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

Кроме того, декартово произведение определяется иначе, чем в набор теория в том смысле, что кортежи считаются "мелкими" для целей операции. То есть декартово произведение набора п-комплекты с набором м-tuples дает набор "сплющенных" (п + м)-кортежи (тогда как базовая теория множеств предписывала бы набор из 2-х кортежей, каждый из которых содержит ппара и м-комплект). Более формально р × S определяется следующим образом:

Мощность декартова произведения - это произведение мощностей его факторов, то есть |р × S| = |р| × |S|.

Проекция (Π)

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

Примечание: при реализации в SQL стандартная "проекция по умолчанию" возвращает мультимножество вместо набора, и Π прогноз для исключения повторяющихся данных получается путем добавления ОТЧЕТЛИВЫЙ ключевое слово.

Выбор (σ)

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

Чтобы получить список всех друзей или деловых партнеров в адресной книге, выбор может быть записан как . Результатом будет отношение, содержащее каждый атрибут каждой уникальной записи, где isFriend правда или где isBusinessContact правда.

Переименовать (ρ)

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

Чтобы переименовать атрибут isFriend в isBusinessContact в отношении, может быть использован.

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

Естественное соединение ()

Естественное соединение (⋈) - это бинарный оператор который записывается как (рS) где р и S находятся связи.[1] Результатом естественного соединения является набор всех комбинаций кортежей в р и S которые совпадают по своим общим именам атрибутов. Для примера рассмотрим таблицы Наемный рабочий и Отдел и их естественное соединение:

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

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

Естественное соединение, возможно, является одним из наиболее важных операторов, поскольку оно является реляционным аналогом логического оператора AND. Обратите внимание, что если одна и та же переменная появляется в каждом из двух предикатов, связанных оператором AND, то эта переменная обозначает одно и то же, и оба появления всегда должны быть заменены одним и тем же значением (это следствие идемпотентность логического И). В частности, естественное соединение позволяет комбинировать отношения, которые связаны иностранный ключ. Например, в приведенном выше примере внешний ключ, вероятно, хранится от Наемный рабочий.DeptName к Отдел.DeptName а затем естественное соединение Наемный рабочий и Отдел объединяет всех сотрудников со своими отделами. Это работает, потому что внешний ключ хранится между атрибутами с тем же именем. Если это не так, например, во внешнем ключе из Отдел.Управляющий делами к Наемный рабочий.имя тогда мы должны переименовать эти столбцы, прежде чем мы примем естественное соединение. Такое соединение иногда также называют Equijoin (увидеть θ-присоединиться).

Более формально семантика естественного соединения определяется следующим образом:

 

 

 

 

(1)

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

Естественное соединение можно смоделировать с помощью примитивов Кодда следующим образом. Предположим, что c1,...,cм являются ли имена атрибутов общими для р и S, р1,...,рп являются ли имена атрибутов уникальными для р и s1,...,sk являются ли имена атрибутов уникальными для S. Кроме того, предположим, что имена атрибутов Икс1,...,Иксм ни в р ни в S. На первом этапе мы можем теперь переименовать общие имена атрибутов в S:

 

 

 

 

(2)

Затем берем декартово произведение и выбираем кортежи, которые нужно объединить:

 

 

 

 

(3)

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

 

 

 

 

(4)

θ-соединиться и равняться

Рассмотрим таблицы Машина и Лодка где указаны модели автомобилей и лодок и их цены. Предположим, покупатель хочет купить машину и лодку, но не хочет тратить на лодку больше денег, чем на машину. В θ-соединиться (⋈θ) на предикате CarPriceЛодкаЦена производит уплощенные пары строк, удовлетворяющие предикату. При использовании условия, в котором атрибуты равны, например Цена, тогда условие может быть указано как Цена=Ценаили альтернативно (Цена) сам.

Если мы хотим объединить кортежи из двух отношений, где условием комбинирования является не просто равенство общих атрибутов, тогда удобно иметь более общую форму оператора соединения, которая является θ-join (или theta-join). В θ-join - это бинарный оператор, который записывается как или где а и б имена атрибутов, θ бинарный реляционный оператор в наборе {<, ≤, =, ≠, >, ≥}, υ - постоянная величина, а р и S отношения. Результат этой операции состоит из всех комбинаций кортежей в р и S это удовлетворяет θ. Результат θ-join определяется, только если заголовки S и р не пересекаются, то есть не содержат общего атрибута.

Таким образом, моделирование этой операции в основных операциях выглядит следующим образом:

рθ S = σθ(р × S)

Если оператор θ является оператором равенства (=), то это соединение также называется Equijoin.

Однако обратите внимание, что компьютерный язык, поддерживающий операторы естественного соединения и выбора, не требует θ-join, так как это может быть достигнуто путем выбора из результата естественного соединения (которое вырождается в декартово произведение, когда нет общих атрибутов).

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

Полусоединение (⋉)(⋊)

Левое полусоединение - это соединение, подобное естественному соединению и записанное как рS где р и S находятся связи.[2] Результатом будет набор всех кортежей в р для которого есть кортеж в S которые совпадают по их общим именам атрибутов. Отличие от естественного соединения в том, что другие столбцы S не появляются. Например, рассмотрим таблицы Наемный рабочий и Отдел и их полусоединение:

Более формально семантика полусоединения может быть определена следующим образом:

рS = { т : тр ∧ ∃sS(Весело (тs)) }

где Весело(р) такое же, как в определении естественного соединения.

Полусоединение можно смоделировать с помощью естественного соединения, как показано ниже. Если а1, ..., ап имена атрибутов р, тогда

рS = πа1,..,ап(рS).

Поскольку мы можем моделировать естественное соединение с помощью основных операторов, то это также верно и для полусоединения.

В статье Кодда 1970 года полусоединение называется ограничением.[3]

Antijoin (▷)

Антисоединение, записанное как рS где р и S находятся связи, похоже на полусоединение, но результатом антисоединения являются только те кортежи в р для чего есть нет кортеж в S то же самое по их общим именам атрибутов.[4]

Для примера рассмотрим таблицы Наемный рабочий и Отдел и theirantijoin:

Антисоединение формально определяется следующим образом:

рS = { т : тр ∧ ¬∃sS(Весело (тs)) }

или

рS = { т : тр, нет кортежа s из S это удовлетворяет Весело (тs) }

где Весело (тs) такое же, как в определении естественного соединения.

Антисоединение также можно определить как дополнять полусоединения следующим образом:

рS = р − рS

 

 

 

 

(5)

Учитывая это, антисоединение иногда называют антисоединением, а оператор антисоединения иногда записывают как символ полусоединения с чертой над ним вместо ▷.

Деление (÷)

Деление - это бинарная операция, которая записывается как р ÷ S. Деление не реализовано непосредственно в SQL. Результат состоит из ограничений кортежей в р к именам атрибутов, уникальным для р, т.е. в заголовке р но не в заголовке S, для которого считается, что все их комбинации с наборами из S присутствуют в р. Для примера см. Таблицы Завершено, DBProject и их деление:

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

р ÷ S = { т[а1,...,ап] : тр ∧ ∀sS ( (т[а1,...,ап] ∪ s) ∈ р) }

 

 

 

 

(6)

куда {а1,...,ап} - это набор имен атрибутов, уникальных для р и т[а1,...,ап] является ограничением т к этому набору. Обычно требуется, чтобы имена атрибутов в заголовке S являются подмножеством тех из р потому что иначе результат операции всегда будет пустым.

Моделирование разделения с основными операциями выглядит следующим образом. Мы предполагаем, что а1,...,ап являются ли имена атрибутов уникальными для р и б1,...,бм являются названиями атрибутов S. На первом этапе мы проектируем р по его уникальным именам атрибутов и построить все комбинации с кортежами в S:

Т : = πа1,...,ап(р) × S

В предыдущем примере T представлял бы таблицу, в которой каждый ученик (потому что ученик является уникальным ключом / атрибутом завершенной таблицы) объединяется с каждой заданной задачей. Таким образом, Евгений, например, имел бы две строки, Евгений → База данных1 и Евгений → База данных2 в T.

EG: Во-первых, давайте представим, что «Завершено» имеет третий атрибут, называемый «оценка». Здесь нежелательный багаж, поэтому мы должны всегда его проецировать. Фактически, на этом этапе мы также можем удалить «Задачу» из R; умножение надевает его обратно.
Т : = πСтудент(р) × S // Это дает нам все возможные желаемые комбинации, включая те, которые фактически не существуют в R, и исключая другие (например, Fred | compiler1, что не является желаемой комбинацией)

На следующем шаге вычитаем р из Т

связь:

U := Тр

В U у нас есть возможные комбинации, которые "могли" быть в р, но не было.

Е.Г .: Опять же с прогнозами - Т и р должны иметь идентичные имена / заголовки атрибутов.
U := Т - πСтудент, Задание(р) // Это дает нам список «чего не хватает».

Итак, если мы теперь возьмем проекцию на имена атрибутов, уникальные для р

то у нас есть ограничения наборов в р для которых не все комбинации с кортежами в S присутствовали в р:

V : = πа1,...,ап(U)
Напр .: Проект U вплоть до рассматриваемого атрибута (ов) (Студент)
V : = πСтудент(U)

Итак, что остается сделать, это взять проекцию р на его уникальные имена атрибутов и вычесть те из V:

W : = πа1,...,ап(р) − V
НАПРИМЕР: W : = πСтудент(р) − V.

Общие расширения

На практике описанная выше классическая реляционная алгебра расширяется различными операциями, такими как внешние соединения, агрегатные функции и даже транзитивное замыкание.[5]

Внешние стыки

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

Операторы, определенные в этом разделе, предполагают существование значение NULL ценить, ω, который мы не определяем, который будет использоваться для значений заполнения; на практике это соответствует НОЛЬ в SQL. Чтобы сделать последующие операции выбора в результирующей таблице значимыми, семантическое значение должно быть присвоено значениям NULL; в подходе Кодда пропозициональная логика, используемая при выборе, такова: расширен до трехзначной логики, хотя мы опускаем эти подробности в этой статье.

Определены три оператора внешнего соединения: левое внешнее соединение, правое внешнее соединение и полное внешнее соединение. (Слово «внешний» иногда опускается.)

Левое внешнее соединение (⟕)

Левое внешнее соединение записывается как рS где р и S находятся связи.[7] Результатом левого внешнего соединения является набор всех комбинаций кортежей в р и S которые равны по своим общим именам атрибутов, в дополнение (грубо говоря) к кортежам в р у которых нет подходящих кортежей в S.

Для примера рассмотрим таблицы Наемный рабочий и Отдел и их левое внешнее соединение:

В результирующем отношении кортежи в S которые не имеют общих значений в общих именах атрибутов с кортежами в р взять значение NULL ценить, ω.

Поскольку в Отдел с DeptName из Финансы или Должностное лицо, ωs входят в результирующее отношение, где кортежи в Наемный рабочий есть DeptName из Финансы или Должностное лицо.

Позволять р1, р2, ..., рп быть атрибутами отношения р и разреши {(ω, ..., ω)} быть одноэлементным отношением к атрибутам, которые уникальный к отношению S (те, которые не являются атрибутами р). Тогда левое внешнее соединение может быть описано в терминах естественного соединения (и, следовательно, с использованием основных операторов) следующим образом:

Правое внешнее соединение (⟖)

Правое внешнее соединение ведет себя почти так же, как левое внешнее соединение, но роли таблиц меняются.

Правое внешнее соединение связи р и S записывается как рS.[8] Результатом правого внешнего соединения является набор всех комбинаций кортежей в р и S которые равны по своим общим именам атрибутов, в дополнение к кортежам в S у которых нет подходящих кортежей в р.

Например, рассмотрим таблицы Наемный рабочий и Отдел и их правое внешнее соединение:

В результирующем отношении кортежи в р которые не имеют общих значений в общих именах атрибутов с кортежами в S взять значение NULL ценить, ω.

Поскольку в Наемный рабочий с DeptName из Производство, ωs встречаются в атрибутах Name и EmpId результирующего отношения, где кортежи в Отдел имел DeptName из Производство.

Позволять s1, s2, ..., sп быть атрибутами отношения S и разреши {(ω, ..., ω)} быть одноэлементным отношением к атрибутам, которые уникальный к отношению р (те, которые не являются атрибутами S). Затем, как и в случае с левым внешним соединением, правое внешнее соединение можно смоделировать с помощью естественного соединения следующим образом:

Полное внешнее соединение (⟗)

В внешнее соединение или полное внешнее соединение по сути, объединяет результаты левого и правого внешних соединений.

Полное внешнее соединение записывается как рS где р и S находятся связи.[9] Результатом полного внешнего соединения является набор всех комбинаций кортежей в р и S которые равны по своим общим именам атрибутов, в дополнение к кортежам в S у которых нет подходящих кортежей в р и кортежи в р у которых нет подходящих кортежей в S в их общих именах атрибутов.

Для примера рассмотрим таблицы Наемный рабочий и Отдел и их полное внешнее соединение:

В результирующем отношении кортежи в р которые не имеют общих значений в общих именах атрибутов с кортежами в S взять значение NULL ценить, ω. Кортежи в S которые не имеют общих значений в общих именах атрибутов с кортежами в р также возьмите значение NULL ценить, ω.

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

рS = (рS) ∪ (рS)

Операции для вычисления домена

В реляционной алгебре до сих пор не введено ничего, что позволяло бы вычисления в областях данных (кроме оценки пропозициональных выражений, включающих равенство). Например, невозможно использовать только представленную до сих пор алгебру, чтобы написать выражение, которое умножало бы числа из двух столбцов, например цена за единицу с количеством, чтобы получить общую цену. Практические языки запросов имеют такие возможности, например SQL SELECT позволяет арифметическим операциям определять новые столбцы в результате ВЫБРАТЬ Цена за единицу * количество В КАЧЕСТВЕ Итоговая цена ИЗ т, и аналогичная возможность предоставляется более явно Учебник D с ПРОДЛЕВАТЬ ключевое слово.[10] В теории баз данных это называется расширенная проекция.[11]:213

Агрегация

Более того, вычисление различных функций для столбца, например суммирование его элементов, также невозможно с использованием ранее введенной реляционной алгебры. Есть пять агрегатные функции которые включены в большинство систем реляционных баз данных. Этими операциями являются Sum, Count, Average, Maximum и Minimum. В реляционной алгебре операция агрегирования по схеме (А1, А2, ... Ап) записывается следующим образом:

где каждый Аj', 1 ≤ jk, является одним из исходных атрибутов Ая, 1 ≤ яп.

Атрибуты, предшествующие грамм представляют собой группирующие атрибуты, которые действуют как предложение «group by» в SQL. Затем к отдельным атрибутам применяется произвольное количество функций агрегирования. Операция применяется к произвольному отношению р. Атрибуты группировки не являются обязательными, и если они не указаны, функции агрегирования применяются ко всему отношению, к которому применяется операция.

Предположим, у нас есть таблица с именем учетная запись с тремя столбцами, а именно Account_Number, Branch_Name и Остаток средств. Мы хотим найти максимальный баланс каждой отрасли. Это достигается Branch_NameгМаксимум(Остаток средств)(учетная запись). Чтобы найти самый высокий баланс всех счетов независимо от филиала, мы могли бы просто написать гМаксимум(Остаток средств)(учетная запись).

Переходное закрытие

Хотя реляционная алгебра кажется достаточно мощной для большинства практических целей, на ней есть несколько простых и естественных операторов. связи что не может быть выражено реляционной алгеброй. Один из них - переходное закрытие бинарного отношения. Учитывая домен D, пусть бинарное отношение р быть подмножеством D×D. Переходное замыкание р+ из р наименьшее подмножество D×D который содержит р и удовлетворяет следующему условию:

Нет выражения реляционной алгебры E(р) принимая р как переменный аргумент, который производит р+. Это можно доказать, используя тот факт, что с учетом выражения отношения E для которого утверждается, что E(р) = р+, где р это переменная, мы всегда можем найти экземпляр р из р (и соответствующий домен d) такие, что E(р) ≠ р+.[12]

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

Использование алгебраических свойств для оптимизации запросов

Запросы можно представить как дерево, где

  • внутренние узлы - операторы,
  • листья связи,
  • поддеревья - это подвыражения.

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

Здесь мы представляем набор правил, которые можно использовать в таких преобразованиях.

Выбор

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

Основные свойства выбора

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

Разделение выборок на сложные условия

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

Выбор и кросс-продукт

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

Это может быть эффективно сделано, если за перекрестным произведением следует оператор выбора, например . Учитывая определение соединения, это наиболее вероятный случай. Если за перекрестным произведением не следует оператор выбора, мы можем попытаться сдвинуть выборку с более высоких уровней дерева выражения, используя другие правила выбора.

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

Операторы выбора и установки

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

Выбор и проекция

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

Проекция

Основные свойства проекции

Проекция идемпотентна, так что серия (действительных) проекций эквивалентна самой внешней проекции.

Проекция и операторы множества

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

Проекция не распространяется на пересечения и устанавливает разницу. Контрпримеры дают:

и

где б предполагается отличным от б '.

Переименовать

Основные свойства переименования

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

Переименовать и установить операторы

Переименование распространяется на разность множеств, объединение и пересечение.

Продукт и союз

Декартово произведение распределительно по объединению.

Реализации

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

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

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

Смотрите также

Рекомендации

  1. ^ В Unicode, символ бабочки - ⋈ (U + 22C8).
  2. ^ В Unicode, символ ltimes - ⋉ (U + 22C9). Символ rtimes - ⋊ (U + 22CA)
  3. ^ Кодд, Э.Ф. (Июнь 1970 г.). «Реляционная модель данных для больших общих банков данных». Коммуникации ACM. 13 (6): 377–387. Дои:10.1145/362384.362685.
  4. ^ В Unicode символ антисоединения - ▷ (U + 25B7).
  5. ^ М. Тамер Озсу; Патрик Вальдурье (2011). Принципы распределенных систем баз данных (3-е изд.). Springer. п. 46. ISBN  978-1-4419-8833-1.
  6. ^ Патрик О'Нил; Элизабет О'Нил (2001). База данных: принципы, программирование и производительность, второе издание. Морган Кауфманн. п. 120. ISBN  978-1-55860-438-4.
  7. ^ В Unicode, символ левого внешнего соединения - ⟕ (U + 27D5).
  8. ^ В Unicode, символ правого внешнего соединения - ⟖ (U + 27D6).
  9. ^ В Unicode, символ полного внешнего соединения - ⟗ (U + 27D7).
  10. ^ К. Дж. Дэйт (2011). SQL и теория отношений: как писать точный код SQL. O'Reilly Media, Inc., стр. 133–135. ISBN  978-1-4493-1974-8.
  11. ^ а б Эктор Гарсиа-Молина; Джеффри Д. Уллман; Дженнифер Уидом (2009). Системы баз данных: полная книга (2-е изд.). Пирсон Прентис Холл. ISBN  978-0-13-187325-4.
  12. ^ Ахо, Альфред V .; Джеффри Д. Ульман (1979). «Универсальность языков поиска данных». Материалы 6-го симпозиума ACM SIGACT-SIGPLAN по принципам языков программирования: 110–119. Дои:10.1145/567752.567763.

дальнейшее чтение

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

внешняя ссылка