Реляционная алгебра
В теории баз данных реляционная алгебра — это теория, которая использует алгебраические структуры для моделирования данных и определения запросов к ним с хорошо обоснованной семантикой . Теория была представлена Эдгаром Ф. Коддом .
Основное применение реляционной алгебры — обеспечить теоретическую основу для реляционных баз данных , особенно языков запросов для таких баз данных, главным из которых является SQL . Реляционные базы данных хранят табличные данные, представленные в виде отношений . Запросы к реляционным базам данных часто также возвращают табличные данные, представленные в виде отношений.
Основная цель реляционной алгебры — определить операторы , которые преобразуют одно или несколько входных отношений в выходное отношение. Учитывая, что эти операторы принимают отношения в качестве входных данных и создают отношения в качестве выходных данных, их можно комбинировать и использовать для выражения сложных запросов, которые преобразуют несколько входных отношений (данные которых хранятся в базе данных) в одно выходное отношение (результаты запроса).
Унарные операторы принимают на вход одно отношение. Примеры включают операторы для фильтрации определенных атрибутов (столбцов) или кортежей (строк) из входного отношения. Бинарные операторы принимают два отношения в качестве входных данных и объединяют их в одно выходное отношение. Например, взяв все кортежи, найденные в любом отношении ( объединение ), удалив кортежи из первого отношения, найденного во втором отношении ( различие ), расширив кортежи первого отношения кортежами во втором отношении, соответствующими определенным условиям, и так далее.
Могут быть включены и другие, более продвинутые операторы, где включение или исключение определенных операторов приводит к созданию семейства алгебр.
Введение
[ редактировать ]Реляционной алгебре уделялось мало внимания за пределами чистой математики до публикации Э. Ф. Кодда в реляционной модели данных 1970 году. Кодд предложил такую алгебру в качестве основы для языков запросов к базам данных. (См. раздел «Реализации» .)
Реляционная алгебра оперирует однородными наборами кортежей. где мы обычно интерпретируем m как количество строк в таблице и n — количество столбцов. Все записи в каждом столбце иметь тот же тип. Пять примитивных операторов алгебры Кодда — это выбор , проекция , декартово произведение (также называемое векторным произведением или перекрестным соединением ), объединение множеств и разность множеств .
Операторы установки
[ редактировать ]Реляционная алгебра использует объединение множеств , разность множеств и декартово произведение из теории множеств , но добавляет к этим операторам дополнительные ограничения.
Для объединения множеств и различия множеств два задействованных отношения должны быть совместимы по объединению , то есть два отношения должны иметь одинаковый набор атрибутов. Поскольку пересечение множеств определяется в терминах объединения множеств и разности множеств, два отношения, участвующие в пересечении множеств, также должны быть совместимы по объединению.
Чтобы определить декартово произведение, два задействованных отношения должны иметь непересекающиеся заголовки, то есть у них не должно быть общего имени атрибута.
Кроме того, декартово произведение определяется иначе, чем в теории множеств , в том смысле, что кортежи считаются «поверхностными» для целей операции. То есть декартово произведение набора из n -кортежей с набором из m -кортежей дает набор «сплющенных» ( n + m ) -кортежей (тогда как базовая теория множеств предписывала бы набор из 2-х кортежей, каждый из которых содержащий n -кортеж и m -кортеж). Более формально R × S определяется следующим образом:
Мощность декартова произведения есть произведение мощностей его факторов, т. е. | Р × С | = | р | × | С |.
Проекция ( П )
[ редактировать ]Проекция , — это унарная операция записанная как где представляет собой набор имен атрибутов. Результат такого проектирования определяется как набор , который получается, когда все кортежи в R ограничены набором .
Примечание. При реализации в стандарте SQL «проекция по умолчанию» возвращает мультимножество вместо набора, а проекция Π для устранения повторяющихся данных получается путем добавления DISTINCT
ключевое слово .
Выбор ( р )
[ редактировать ]Обобщенный выбор — это унарная операция, записываемая как где φ — пропозициональная формула , состоящая из атомов , разрешенных при нормальном выборе , и логических операторов. ( и ), ( или ) и ( отрицание ). Этот выбор выбирает все те кортежи в R, для которых выполняется φ .
Чтобы получить список всех друзей или деловых партнеров в адресной книге, выбор можно записать как . Результатом будет отношение, содержащее каждый атрибут каждой уникальной записи, где isFriend имеет значение true или isBusinessContact имеет значение true.
Переименовать ( п )
[ редактировать ]Переименование записанная — это унарная операция, как где результат идентичен R, за исключением того, что атрибут b во всех кортежах переименован в атрибут a . Это просто используется для переименования атрибута отношения или самого отношения.
Чтобы переименовать атрибут «isFriend» в «isBusinessContact» в отношении, может быть использован.
Существует также обозначение, где R переименован в x , а атрибуты переименованы в . [1]
Соединения и подобные им операторы
[ редактировать ]Было предложено разделить этот раздел на другую статью под названием « Join (реляционная алгебра)» . ( Обсудить ) (март 2023 г.) |
Естественное соединение (⨝)
[ редактировать ]Естественное соединение (⨝) — это бинарный оператор , который записывается как ( R ⨝ S ), где R и S — отношения . [а] Результатом естественного соединения является набор всех комбинаций кортежей в R и S , которые имеют одинаковые имена общих атрибутов. В качестве примера рассмотрим таблицы «Сотрудник» и «Отдел» и их естественное соединение: [ нужна ссылка ]
|
|
|
Обратите внимание, что в результате не отображаются ни сотрудник по имени Мэри, ни производственный отдел.
Это также можно использовать для определения состава отношений . Например, состав сотрудников и отделов — это их объединение, как показано выше, проецируемое на все атрибуты, кроме общего атрибута DeptName . В теории категорий соединение представляет собой в точности произведение расслоений .
Естественное соединение, возможно, является одним из наиболее важных операторов, поскольку оно является реляционным аналогом логического оператора И. Обратите внимание, что если одна и та же переменная появляется в каждом из двух предикатов, соединенных оператором И, то эта переменная обозначает одно и то же, и оба появления всегда должны быть заменены одним и тем же значением (это следствие идемпотентности логического И). . В частности, естественное соединение позволяет комбинировать отношения, связанные внешним ключом . Например, в приведенном выше примере внешний ключ, вероятно, принадлежит сотруднику . DeptName в Dept. DeptName , а затем естественное объединение сотрудников и отделов объединяет всех сотрудников с их отделами. Это работает, поскольку внешний ключ сохраняется между атрибутами с одинаковым именем. Если это не так, как, например, во внешнем ключе Dept. из Менеджер для сотрудника . Name , то эти столбцы необходимо переименовать перед естественным объединением. Такое соединение иногда также называют равносоединением ( см. θ -соединение).
Более формально семантика естественного соединения определяется следующим образом:
( 1 ) |
где Fun(t) — предикат , который истинен для отношения t (в математическом смысле), если и только если t — функция (т. е. t не отображает какой-либо атрибут в несколько значений). Обычно требуется, чтобы R и S имели хотя бы один общий атрибут, но если это ограничение опущено и R и S не имеют общих атрибутов, то естественное соединение становится в точности декартовым произведением.
Естественное соединение можно смоделировать с помощью примитивов Кодда следующим образом. Предположим, что c 1 ,..., cm – имена атрибутов, общие для R и S , r 1 ,..., r n – это имена атрибутов, уникальные для R и s 1 ,..., sk , являются имена атрибутов, уникальные для S . Кроме того, предположим, что имена атрибутов x 1 ,..., x m не находятся ни в R, ни в S . На первом этапе общие имена атрибутов в S можно переименовать :
( 2 ) |
Затем мы берем декартово произведение и выбираем кортежи, которые необходимо соединить:
( 3 ) |
Наконец, мы делаем проекцию, чтобы избавиться от переименованных атрибутов:
( 4 ) |
θ -соединение и равносоединение
[ редактировать ]Рассмотрим таблицы «Автомобиль» и «Лодка» , в которых перечислены модели автомобилей и лодок и соответствующие цены. Предположим, клиентка хочет купить машину и лодку, но не хочет тратить на лодку больше денег, чем на машину. θ ≥ -соединение (⋈ θ ) по предикату CarPrice создает сглаженные пары строк , BoatPrice которые удовлетворяют предикату. При использовании условия, в котором атрибуты равны, например Цена, условие можно указать как Цена = Цена. или, альтернативно, ( Цена ).
|
|
|
Чтобы объединить кортежи из двух отношений, где условием объединения является не просто равенство общих атрибутов, удобно иметь более общую форму оператора соединения, которая представляет собой θ -соединение (или тета-соединение). θ - соединение — это бинарный оператор, который записывается как или где a и b — имена атрибутов, θ — бинарный оператор отношения в множестве {<, ≤, =, ≠, >, ≥ }, υ — константа значения, а R и S — отношения. Результатом этой операции являются все комбинации кортежей из R и S, удовлетворяющие θ . Результат θ -соединения определяется только в том случае, если заголовки S и R не пересекаются, то есть не содержат общего атрибута.
Таким образом, моделирование этой операции в основных операциях выглядит следующим образом:
- р ⋈ θ S знак равно σ θ ( р × S )
Если оператор θ является оператором равенства (=), то это соединение также называется эквисоединением .
Обратите внимание, однако, что компьютерный язык, поддерживающий операторы естественного соединения и выбора, также не требует θ -соединения, поскольку этого можно достичь путем выбора из результата естественного соединения (которое вырождается в декартово произведение, когда нет общих атрибуты).
В реализациях SQL соединение по предикату обычно называется внутренним соединением , а ключевое слово on позволяет указать предикат, используемый для фильтрации строк. Важно отметить: формирование плоского декартова произведения с последующей фильтрацией строк концептуально правильно, но реализация будет использовать более сложные структуры данных для ускорения запроса на соединение.
Полусоединение (⋉ и ⋊)
[ редактировать ]Левое полусоединение — это соединение, аналогичное естественному соединению и записываемое как где и являются отношениями . [б] Результатом является набор всех кортежей в для которого есть кортеж в которые совпадают по именам их общих атрибутов. Отличие от естественного соединения состоит в том, что другие столбцы не появляются. Например, рассмотрим таблицы «Сотрудник» и «Отдел» и их полусоединение: [ нужна ссылка ]
|
|
|
Более формально семантику полусоединения можно определить как следует:
где такое же, как в определении естественного соединения.
Полусоединение можно смоделировать с использованием естественного соединения следующим образом. Если являются именами атрибутов , затем
Поскольку мы можем моделировать естественное соединение с помощью базовых операторов, отсюда следует, что это справедливо и для полусоединения.
В статье Кодда 1970 года полусоединение называется ограничением. [2]
Антисоединение (▷)
[ редактировать ]Антисоединение, записанное как R ▷ S , где R и S — отношения , [с] аналогично полусоединению, но результатом антиобъединения являются только те кортежи в R , для которых нет кортежа в S, равного по именам их общих атрибутов. [ нужна ссылка ]
В качестве примера рассмотрим таблицы «Сотрудник» и «Отдел» и их антисоединение:
|
|
|
Антисоединение формально определяется следующим образом:
- р ▷ S знак равно { т : т ∈ R ∧ ¬∃ s ∈ S ( Fun ( т ∪ s )) }
или
- R ▷ S = { t : t ∈ R , не существует кортежа s из S , который удовлетворяет условию Fun ( t ∪ s ) }
где Fun ( t ∪ s ) соответствует определению естественного соединения.
Антисоединение также можно определить как дополнение полусоединения следующим образом:
р ▷ С знак равно р - р ⋉ С | ( 5 ) |
Учитывая это, анти-соединение иногда называют анти-полусоединением, а оператор анти-соединения иногда записывается как символ полусоединения с чертой над ним вместо ▷.
В случае, когда отношения имеют одинаковые атрибуты (совместимые по объединению), антисоединение равно минусу.
Дивизион (÷)
[ редактировать ]Деление — это бинарная операция, которая записывается R ÷ S. как Деление не реализовано непосредственно в SQL. Результат состоит из ограничений кортежей в R на имена атрибутов, уникальные для R , т. е. в заголовке R но не в заголовке S , для чего считается, что все их комбинации с кортежами в S присутствуют в R. , Для примера см. таблицы Completed , DBProject и их разделение:
|
|
|
Если DBProject содержит все задачи проекта «База данных», то результат приведенного выше разделения содержит ровно тех студентов, которые выполнили обе задачи проекта «База данных». Более формально семантика деления определяется следующим образом:
р ÷ S знак равно { т [ а 1 ,..., а п ] : т ∈ R ∧ ∀ s ∈ S ( ( т [ а 1 ,..., а п ] ∪ s ) ∈ R ) } | ( 6 ) |
где { a 1 ,..., a n } — набор имен атрибутов, уникальных для R , а t [ a 1 ,..., ] an — ограничение t на этот набор. Обычно требуется, чтобы имена атрибутов в заголовке S были подмножеством имен атрибутов R , поскольку в противном случае результат операции всегда будет пустым.
Моделирование деления с основными операциями происходит следующим образом. Мы предполагаем, что a 1 ,..., an — имена атрибутов, уникальные для R , а b 1 ,..., b m — имена атрибутов S . На первом этапе мы проецируем R на его уникальные имена атрибутов и создаем все комбинации с кортежами в S :
- Т := π а 1 ,..., а п ( р ) × S
В предыдущем примере T будет представлять таблицу, в которой каждый студент (поскольку студент является уникальным ключом/атрибутом таблицы «Завершено») сочетается с каждой заданной задачей. Так, например, у Юджина в T будет две строки: Юджин → База данных1 и Юджин → База данных2.
- ЭГ: Во-первых, давайте представим, что у «Завершено» есть третий атрибут, называемый «оценка». Это нежелательный багаж, поэтому мы всегда должны его проецировать. Фактически, на этом этапе мы также можем удалить «Задачу» из R; умножение возвращает его обратно.
- T := π Student ( R ) × S // Это дает нам все возможные желаемые комбинации, включая те, которые на самом деле не существуют в R, и исключая другие (например, Фред | компилятор1, который не является желаемой комбинацией)
|
На следующем шаге мы вычитаем R из T
- У := Т - Р
В U у нас есть возможность комбинации, которые «могли» быть в R , но не были.
- ЭГ: И снова про проекции: T и R должны иметь одинаковые имена/заголовки атрибутов.
- U := T − π Student,Task ( R ) // Это дает нам список того, чего не хватает.
|
|
|
Итак, если мы теперь возьмем проекцию имен атрибутов, уникальных для R
тогда у нас есть ограничения кортежей в R, для которых не все комбинации с кортежами в S присутствовали в R :
- V := π а 1 ,..., а п ( U )
- ПРИМЕР: Проект U вплоть до рассматриваемых атрибутов (Студент)
- V := π Student ( U )
|
Итак, что осталось сделать, так это взять проекцию R на его уникальные имена атрибутов и вычтите их из V :
- W := π а 1 ,..., а п ( р ) - V
- EG: W := π Student ( R ) − V .
|
|
|
Общие расширения
[ редактировать ]На практике описанная выше классическая реляционная алгебра расширяется за счет различных операций, таких как внешние соединения, агрегатные функции и даже транзитивное замыкание. [3]
Внешние соединения
[ редактировать ]В то время как результат соединения (или внутреннего соединения) состоит из кортежей, образованных путем объединения совпадающих кортежей в двух операндах, внешнее соединение содержит эти кортежи и, кроме того, некоторые кортежи, образованные путем расширения несовпадающего кортежа в одном из операндов путем «заполнения» значений. для каждого из атрибутов другого операнда. Внешние соединения не считаются частью обсуждавшейся до сих пор классической реляционной алгебры. [4]
Операторы, определенные в этом разделе, предполагают существование нулевого значения ω , которое мы не определяем и которое будет использоваться для значений заполнения; на практике это соответствует NULL в SQL. Чтобы сделать последующие операции выбора в результирующей таблице значимыми, значениям NULL необходимо присвоить семантическое значение; в подходе Кодда пропозициональная логика, используемая при выборе, расширена до трехзначной логики , хотя в этой статье мы опускаем эти детали.
Определены три оператора внешнего соединения: левое внешнее соединение, правое внешнее соединение и полное внешнее соединение. (Слово «внешний» иногда опускается.)
Левое внешнее соединение (⟕)
[ редактировать ]Левое внешнее соединение записывается как R ⟕ S, где R и S — отношения . [д] Результатом левого внешнего соединения является набор всех комбинаций кортежей в R и S , которые имеют одинаковые имена общих атрибутов, а также (грубо говоря) кортежей в , у которых нет совпадающих кортежей в S. R [ нужна ссылка ]
В качестве примера рассмотрим таблицы «Сотрудник» и «Отдел» и их левое внешнее соединение:
|
|
|
В результирующем отношении кортежи в S, которые не имеют общих значений в именах общих атрибутов с кортежами в R, принимают нулевое значение ω .
нет кортежей Поскольку в Dept с DeptName of Finance или Executive , ω в результирующем отношении встречаются , где кортежи в Employer имеют DeptName of Finance или Executive .
Пусть r 1 , r 2 , ..., r n — атрибуты отношения R и пусть {( ω , ..., ω )} — одноэлементный элемент отношение на атрибутах, которые уникальны для отношения S (те, которые не являются атрибутами R ). Тогда левое внешнее соединение можно описать в терминах естественного соединения (и, следовательно, с использованием базовых операторов) следующим образом:
Правое внешнее соединение (⟖)
[ редактировать ]Правое внешнее соединение ведет себя почти идентично левому внешнему объединению, но роли таблиц меняются.
Правое внешнее соединение R и S записывается как R ⟖ S. отношений [и] Результатом правого внешнего соединения является набор всех комбинаций кортежей в R и S , которые имеют одинаковые имена общих атрибутов, в дополнение к кортежам в , у которых нет совпадающих кортежей в R. S [ нужна ссылка ]
Например, рассмотрим таблицы «Сотрудник» и «Отдел» и их правое внешнее соединение:
|
|
|
В результирующем отношении кортежи в R, которые не имеют общих значений в именах общих атрибутов с кортежами в S, принимают нулевое значение ω .
нет кортежей Поскольку в элементе Сотрудник с DeptName of Production , ω встречаются в атрибутах Name и EmpId результирующего отношения, тогда как кортежи в Dept имели DeptName of Production .
Пусть s 1 , s 2 , ..., s n — атрибуты отношения S и пусть {( ω , ..., ω )} — одноэлементный элемент отношение на атрибутах, которые уникальны для отношения R (те, которые не являются атрибутами S ). Затем, как и в случае с левым внешним соединением, правое внешнее соединение можно смоделировать с использованием естественного соединения следующим образом:
Полное внешнее соединение (⟗)
[ редактировать ]Внешнее соединение или полное внешнее соединение фактически объединяет результаты левого и правого внешних соединений.
записывается как R⟗S , S где R и — отношения Полное внешнее соединение . [ф] Результатом полного внешнего соединения является набор всех комбинаций кортежей в R и S , которые равны по именам общих атрибутов, в дополнение к кортежам в S , у которых нет совпадающих кортежей в R, и кортежам в R , у которых нет совпадающих кортежей. в S в именах их общих атрибутов. [ нужна ссылка ]
В качестве примера рассмотрим таблицы «Сотрудник» и «Отдел» и их полное внешнее соединение:
|
|
|
В результирующем отношении кортежи в R, которые не имеют общих значений в именах общих атрибутов с кортежами в S, принимают нулевое значение ω . Кортежи в S, которые не имеют общих значений в именах общих атрибутов с кортежами в R, также принимают нулевое значение ω .
Полное внешнее соединение можно смоделировать с использованием левого и правого внешних соединений (и, следовательно, естественного соединения и объединения множеств) следующим образом:
- р ⟗ S знак равно ( р ⟕ S ) ∪ ( р ⟖ S )
Операции для вычислений предметной области
[ редактировать ]В реляционной алгебре пока не представлено ничего, что позволяло бы выполнять вычисления в областях данных (кроме вычисления пропозициональных выражений, содержащих равенство). Например, невозможно, используя только введенную до сих пор алгебру, написать выражение, которое умножало бы числа из двух столбцов, например, цену за единицу товара на количество, чтобы получить общую цену. Практические языки запросов имеют такие возможности, например SQL SELECT позволяет арифметическим операциям определять новые столбцы в результате. SELECT unit_price * quantity AS total_price FROM t
, и аналогичная возможность более подробно представлена в Tutorial D. EXTEND
ключевое слово. [5] В теории баз данных это называется расширенной проекцией . [6] : 213
Агрегация
[ редактировать ]Более того, вычисление различных функций над столбцом, например суммирование его элементов, также невозможно с использованием введенной до сих пор реляционной алгебры. В большинство систем реляционных баз данных включены пять агрегатных функций . Этими операциями являются сумма, счет, среднее, максимум и минимум. В реляционной алгебре операция агрегирования над схемой ( A 1 , A 2 , ... An ) записывается следующим образом:
где каждый A j ', 1 ≤ j ≤ k , является одним из исходных атрибутов A i , 1 ≤ i ≤ n .
Атрибуты, предшествующие g, являются атрибутами группировки, которые действуют как предложение «группировать по» в SQL. Затем к отдельным атрибутам применяется произвольное количество функций агрегирования. Операция применяется к произвольному отношению r . Атрибуты группировки являются необязательными, и если они не указаны, функции агрегирования применяются ко всему отношению, к которому применяется операция.
Предположим, у нас есть таблица с именем Счет с тремя графами, а именно Account_Number, Branch_Name и Баланс . Мы хотим найти максимальный баланс каждой ветви. Это достигается за счет Имя_филиала G Макс( Баланс ) ( Счет ). Чтобы найти наибольший баланс всех счетов независимо от филиала, мы могли бы просто написать G Max( Баланс ) ( Счет ).
Группировку часто записывают как Имя_филиала ɣ Макс( Баланс ) ( Учетная запись ) вместо этого. [6]
Транзитивное замыкание
[ редактировать ]Хотя реляционная алгебра кажется достаточно мощной для большинства практических целей, существуют некоторые простые и естественные операторы отношений , которые не могут быть выражены с помощью реляционной алгебры. Одним из них является транзитивное замыкание бинарного отношения. Для заданной области D пусть бинарное отношение R является подмножеством D × D . Транзитивное замыкание R + R — это наименьшее подмножество D × D , содержащее R и удовлетворяющее следующему условию:
Это можно доказать, используя тот факт, что не существует выражения реляционной алгебры E ( R ), принимающего R в качестве переменного аргумента, которое производит R + . [7]
Однако SQL официально поддерживает такие запросы с фиксированными точками с 1999 года, и задолго до этого у него были расширения в этом направлении, специфичные для конкретного поставщика.
Использование алгебраических свойств для оптимизации запросов
[ редактировать ]Системы управления реляционными базами данных часто включают в себя оптимизатор запросов , который пытается определить наиболее эффективный способ выполнения данного запроса. Оптимизаторы запросов перебирают возможные планы запросов , оценивают их стоимость и выбирают план с наименьшей оценочной стоимостью. Если запросы представлены операторами реляционной алгебры, оптимизатор запросов может перечислить возможные планы запросов, переписав исходный запрос, используя алгебраические свойства этих операторов.
Запросы можно представить в виде дерева , где
- внутренние узлы являются операторами,
- листья-это отношения ,
- поддеревья являются подвыражениями.
Основная цель оптимизатора запросов — преобразовать деревья выражений в эквивалентные деревья выражений, в которых средний размер отношений, создаваемых подвыражениями в дереве, меньше, чем был до оптимизации . Вторичная цель — попытаться сформировать общие подвыражения в одном запросе или, если одновременно оценивается более одного запроса, во всех этих запросах. Обоснование второй цели заключается в том, что достаточно один раз вычислить общие подвыражения, и результаты можно использовать во всех запросах, содержащих это подвыражение.
Вот набор правил, которые можно использовать при таких преобразованиях.
Выбор
[ редактировать ]Правила, касающиеся операторов выбора, играют наиболее важную роль в оптимизации запросов. Выбор — это оператор, который очень эффективно уменьшает количество строк в своем операнде, поэтому, если выборки в дереве выражений перемещаются к листьям, внутренние связи (получаемые подвыражениями), скорее всего, уменьшатся.
Основные свойства выбора
[ редактировать ]Выбор является идемпотентным (несколько применений одного и того же выбора не имеют дополнительного эффекта, кроме первого) и коммутативным (порядок применения выбора не влияет на конечный результат).
Разбивка выборок со сложными условиями
[ редактировать ]Выборка, условием которой является конъюнкция более простых условий, эквивалентна последовательности выборок с теми же отдельными условиями, а выборка, условием которой является дизъюнкция, эквивалентна объединению выборок. Эти идентификаторы можно использовать для объединения выборок, чтобы нужно было оценивать меньшее количество выборок, или для их разделения, чтобы выборки компонентов можно было перемещать или оптимизировать отдельно.
Выбор и перекрестное произведение
[ редактировать ]Перекрестное произведение — самый затратный оператор для оценки. Если входные отношения имеют N и M строк, результат будет содержать ряды. Поэтому важно уменьшить размер обоих операндов перед применением оператора перекрестного произведения.
Это можно эффективно сделать, если за векторным произведением следует оператор выбора, например . Учитывая определение соединения, это наиболее вероятный случай. Если за векторным произведением не следует оператор выбора, мы можем попытаться перенести выборку с более высоких уровней дерева выражений, используя другие правила выбора.
В приведенном выше случае условие A разбивается на условия B , C и D с использованием правил разделения для сложных условий выбора, так что и B содержит атрибуты только из R , C атрибуты только из P , а D содержит часть A , которая содержит атрибуты как из R, так и из P. содержит Обратите внимание, что B , C или D возможно пусты. Тогда имеет место следующее:
Операторы выбора и установки
[ редактировать ]Выбор является дистрибутивным по операторам разности множеств, пересечения и объединения. Следующие три правила используются для перемещения выбора ниже операций над множествами в дереве выражений. Для операторов разности множеств и операторов пересечения можно применить оператор выбора только к одному из операндов после преобразования. Это может быть полезно, если один из операндов мал и затраты на вычисление оператора выбора перевешивают преимущества использования меньшего отношения в качестве операнда.
Выбор и проекция
[ редактировать ]Выбор коммутирует с проекцией тогда и только тогда, когда поля, на которые ссылаются условия выбора, являются подмножеством полей в проекции. Выполнение выбора перед проецированием может быть полезно, если операнд является перекрестным произведением или соединением. В других случаях, если вычисление условия выбора является относительно дорогостоящим, перемещение выбора за пределы проекции может уменьшить количество кортежей, которые необходимо проверить (поскольку проекция может создавать меньше кортежей из-за исключения дубликатов, возникающих из-за пропущенных полей).
Проекция
[ редактировать ]Основные свойства проекции
[ редактировать ]Проекция идемпотентна, так что серия (действительных) проекций эквивалентна самой внешней проекции.
Операторы проекции и множества
[ редактировать ]Проекция дистрибутивна по объединению множеств.
Проекция не распределяется по пересечению и заданной разнице. Контрпримеры дают:
и
где b предполагается отличным от b' .
Переименовать
[ редактировать ]Основные свойства переименования
[ редактировать ]Последовательные переименования переменной можно объединить в одно переименование. Операции переименования, которые не имеют общих переменных, могут быть произвольно переупорядочены относительно друг друга, что можно использовать для объединения последовательных переименований, чтобы их можно было свернуть.
Переименование и установка операторов
[ редактировать ]Переименование является распределительным по разнице множеств, объединению и пересечению.
Продукт и союз
[ редактировать ]Декартово произведение является распределительным по сравнению с объединением.
Реализации
[ редактировать ]Первым языком запросов, основанным на алгебре Кодда, был Alpha, разработанный самим доктором Коддом. Впоследствии был создан ISBL , и эта новаторская работа получила признание многих авторитетов. [8] как показывающий способ превратить идею Кодда в полезный язык. Business System 12 была недолговечной отраслевой реляционной СУБД, последовавшей примеру ISBL.
В 1998 году Крис Дейт и Хью Дарвен предложили язык под названием Tutorial D, предназначенный для использования при обучении теории реляционных баз данных, и его язык запросов также основан на идеях ISBL. [9] это реализация Tutorial D. Rel — Bmg — это реализация реляционной алгебры в Ruby, которая точно следует принципам Tutorial D и The Third Manifesto . [10]
Даже язык запросов SQL в общих чертах основан на реляционной алгебре, хотя операнды в SQL ( таблицы ) не являются в точности отношениями , и некоторые полезные теоремы о реляционной алгебре не выполняются в аналоге SQL (возможно, в ущерб оптимизаторам и/или оптимизаторам). или пользователей). Модель таблицы SQL представляет собой пакет ( мультмножество ), а не набор. Например, выражение это теорема для реляционной алгебры на множествах, но не для реляционной алгебры на мешках; описание реляционной алгебры на мешках см. в главе 5 «Полного» учебника Гарсиа-Молины , Ульмана и Видома . [6]
См. также
[ редактировать ]- Декартово произведение
- D4 (язык программирования) (реализация D)
- База данных
- Логика родственников
- Объектно-ролевое моделирование
- Проекция (математика)
- Проекция (реляционная алгебра)
- Проекция (теория множеств)
- Связь
- Связь (база данных)
- Алгебра отношений
- Композиция отношений
- Построение отношений
- Реляционное исчисление
- Реляционная база данных
- Реляционная модель
- Теория отношений
- Триадное отношение
- Кортежное реляционное исчисление
- SQL
- Ученый-компьютерщик
- Теорема Кодда
Примечания
[ редактировать ]- ^ В Юникоде символ соединения — ⨝ (U+2A1D), а вместо него иногда используется символ галстука-бабочки — ⋈ (U+22C8).
- ^ В Юникоде символ ltimes — ⋉ (U+22C9). Символ rtimes: ⋊ (U+22CA).
- ^ В Юникоде символ антисоединения — ▷ (U+25B7).
- ^ В Юникоде символ левого внешнего соединения — ⟕ (U+27D5).
- ^ В Юникоде символ правого внешнего соединения — ⟖ (U+27D6).
- ^ В Юникоде символ полного внешнего соединения — ⟗ (U+27D7).
Ссылки
[ редактировать ]- ^ Зильбершац, Авраам; Генри Ф. Корт; С. Сударшан (2020). Концепции системы баз данных (Седьмое изд.). Нью-Йорк. п. 56. ИСБН 978-0-07-802215-9 . OCLC 1080554130 .
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ Кодд, Э.Ф. (июнь 1970 г.). «Реляционная модель данных для больших общих банков данных» . Коммуникации АКМ . 13 (6): 377–387. дои : 10.1145/362384.362685 . S2CID 207549016 .
- ^ М. Тамер Озсу; Патрик Вальдурье (2011). Принципы систем распределенных баз данных (3-е изд.). Спрингер. п. 46. ИСБН 978-1-4419-8833-1 .
- ^ Патрик О'Нил; Элизабет О'Нил (2001). База данных: принципы, программирование и производительность, второе издание . Морган Кауфманн. п. 120. ИСБН 978-1-55860-438-4 .
- ^ Си Джей Дэйт (2011). SQL и реляционная теория: как писать точный код SQL . O'Reilly Media, Inc., стр. 133–135. ISBN 978-1-4493-1974-8 .
- ^ Jump up to: а б с Эктор Гарсиа-Молина; Джеффри Д. Уллман; Дженнифер Видом (2009). Системы баз данных: полная книга (2-е изд.). Пирсон Прентис Холл. ISBN 978-0-13-187325-4 .
- ^ Ахо, Альфред В.; Джеффри Д. Уллман (1979). «Универсальность языков поиска данных» . Материалы 6-го симпозиума ACM SIGACT-SIGPLAN по принципам языков программирования : 110–119. дои : 10.1145/567752.567763 . S2CID 3242505 .
- ^ Си Джей Дата. «Эдгар Ф. Кодд - лауреат премии А. М. Тьюринга» . amturing.acm.org . Проверено 27 декабря 2020 г.
- ^ Си Джей Дейт и Хью Дарвен. «Базы данных, типы и реляционная модель: Третий манифест» (PDF) . Проверено 4 июля 2024 г.
- ^ «Документация БМГ» . Проверено 4 июля 2024 г.
Дальнейшее чтение
[ редактировать ]Практически любой академический учебник по базам данных подробно описывает классическую реляционную алгебру.
- Имелинский, Т. ; Липски, В. (1984). «Реляционная модель данных и цилиндрические алгебры» . Журнал компьютерных и системных наук . 28 : 80–102. дои : 10.1016/0022-0000(84)90077-1 . (Для связи с цилиндрическими алгебрами ).
Внешние ссылки
[ редактировать ] в этой статье Использование внешних ссылок может не соответствовать политике и рекомендациям Википедии . ( январь 2017 г. ) |
- RAT Relational Algebra Translator Бесплатное программное обеспечение для преобразования реляционной алгебры в SQL
- Видеолекции: Обработка реляционной алгебры . Введение в то, как системы баз данных обрабатывают реляционную алгебру.
- Конспект лекций: Реляционная алгебра – краткое руководство по адаптации SQL-запросов к реляционной алгебре.
- Реляционная - графическая реализация реляционной алгебры.
- Оптимизация запросов . Эта статья представляет собой введение в использование реляционной алгебры для оптимизации запросов и включает многочисленные цитаты для более глубокого изучения.
- Система реляционной алгебры для Oracle и Microsoft SQL Server
- Pireal — экспериментальный образовательный инструмент для работы с реляционной алгеброй.
- DES – образовательный инструмент для работы с реляционной алгеброй и другими формальными языками.
- RelaX - Калькулятор реляционной алгебры (программное обеспечение с открытым исходным кодом, доступное в виде онлайн-сервиса без регистрации)
- РА: интерпретатор реляционной алгебры
- Перевод SQL в реляционную алгебру