Изменения

Перейти к: навигация, поиск
Исчисление через алгебру
== Исчисление через алгебру ==
Проблема исчисления кортежей заключается в том, что можно записать любую сколь угодно большую формулу, но не понятно, что с ней дальше делать. То есть должен быть какой-то способ исполнять соответствующие запросы, иначе с практической точки зрения это все совершенно бессмысленно, хотя с теоретической это бы продолжало иметь смысл.
 
Рассмотрим, как можно преобразовать формулу. Изначально она состоит из каких-то атомарных вещей, которые можно вычислить, для каждой из них сравнить два значения, а далее идут логические связки и кванторы. Поэтому первым действием приводим выражение в предваренную нормальную форму.
{{Определение
|definition=
'''Предваренная нормальная форма''' {{---}} форма, при которой в начале выражения записаны все кванторы, а затем глобальное условие.
}}
Преобразовать После того, как выражение реляционного исчисления приведено в выражение реляционной алгебры происходит предваренную нормальную форму, в несколько этаповглобальном условии оказалось множество переменных.=== Преобразование ===* Построить выражения для Для каждой переменной;* Взять определен диапазон, из которого она берет значения, поэтому можно построить соответсвующее декартово произведение. Другими словами, берем все переменные и строим потенциально огромное декартово произведение;* Отфильтровать . Теперь его необходимо отфильтровать по глобальному условию в из предваренной нормальной форме;* Применить формы. Для каждого кортежа из декартово произведения зафиксированы все значения, поэтому для каждого из них можно проверить, истинно оно или нет. Проверили, то есть сделали фильтр по условию, теперь необходимо применить кванторы.
=== Применение кванторов ===
==== Квантор всеобщности ====
Квантор всеобщности соответсвует соответствует делению. Делим на все столбцы, порожденные переменной. В каждом кортеже несколько столбцов, делим на всех оптом.
=== Пример преобразования ===
Рассмотрим такой запрос:
<font color = blue>select</font> G<font color = grey>.</font>GId <font color = blue>where $\exists$</font>S <font color = grey>(</font><font color = blue>$\forall$</font>C <font color = grey>(</font><font color = blue>$\exists$</font>P
<font color = grey>(</font>G<font color = grey>.</font>GId <font color = grey>=</font> S<font color = grey>.</font>GId <font color = blue>$\land$</font> S<font color = grey>.</font>SId <font color = grey>=</font> P<font color = grey>.</font>SId <font color = blue>$\land$</font>
Анонимный участник

Навигация