Изменения

Перейти к: навигация, поиск

Этапы обработки запроса. Перезапись запросов

140 байт добавлено, 12:53, 27 декабря 2021
Алгебраические свойства операций
$σ_{cond_1 ∧ cond_2}(R_1 ⋈ R_2) ⇒ σ_{cond_1}(R_1) ⋈ σ_{cond_2}(R_2)$
}}
'''Проекция'''
Можем безопасно проекцировать результат объединения
{{Утверждение
|statement=
$π_A(R_1 ∪ R_2) ⇒ π_A(R_1) ∪ π_A(R_2)$
}}
1) Можем Не можем безопасно проекцировать проецировать результат объединенияпересечения, потому что слева могли быть кортежи, которые кроме атрибута $A$ содержат еще какой-то дополнительный атрибут $X$. Они различались, вошли в пересечение и уже потом мы их спроецируем. Если же сначала сделать проекцию, то этот атрибут $X$ теряется и два кортежа с одинаковым атрибутом $A$ но разным атрибутом $X$ для нас станут неразличимы.{{Утверждение|statement=$π_A(R_1 ∩ R_2) ⇏ π_A(R_1) ∩ π_A(R_2)$}}
2Аналогично для разности{{Утверждение|statement=$π_A(R_1 - R_2) ⇏ π_A(R_1) Не можем безопасно проецировать результат пересечения, потому что слева могли быть кортежи, которые кроме атрибута $A$ содержат еще какой-то дополнительный атрибут π_A(R_2)$X$. Они различались, вошли в пересечение и уже потом мы их спроецируем. Если же сначала сделать проекцию, то этот атрибут $X$ теряется и два кортежа с одинаковым атрибутом $A$ но разным атрибутом $X$ для нас станут неразличимы.}}
3) С естественным соединением все чуть сложнее. Протолкнем в проекцию только те атрибуты, которые были из левого аргумента, вправо только те, которые были из правого. Но зачем мы делаем $A ∪ R_2$, зачем $R_2$? Именно по $R_2$ мы будем соединять, по ним проводилось естественное соединение. Аналогично $A ∪ R_1$. Внешняя проекция нужна для разноститого, чтобы избавиться от тех атрибутов, которые мы потенциально могли добавить в левой и правой части. {{Утверждение|statement=$π_{A}(R_1 ⋈ R_2) ⇒ π_A(π_{(A ∪ R_2) ∩ R_1}(R_1) ⋈ π_{(A ∪ R_1) ∩ R_2}(R_2))$}}==== Коммутативность операций ====
4) С естественным соединением все чуть сложнее. Протолкнем в проекцию только те атрибутыЗа счет коммутативности можем выбирать какая сторона считается левой, которые были из левого аргумента, вправо только те, которые были из правого. Но зачем мы делаем $A ∪ R_2$, зачем $R_2$? Именно по $R_2$ мы будем соединять, по ним проводилось естественное соединение. Аналогично $A ∪ R_1$а какая правой. Внешняя проекция нужна для тогоЭто полезно, чтобы избавиться от тех атрибутовпотому что можем не делать дублирующиеся методы, которые мы потенциально могли добавить в левой и правой части. когда они не симметричны. *Проекция** $π_A(R_1 ∪ R_2) ⇒ π_A(R_1) ∪ π_A(R_2)$** $π_A(R_1 ∩ R_2) ⇏ π_A(R_1) ∩ π_A(R_2)$** $π_A(R_1 - R_2) ⇏ π_A(R_1) - π_A(R_2)$** $π_{A}(R_1 ⋈ R_2) ⇒ π_A(π_{(A ∪ R_2) ∩ R_1}(R_1) ⋈ π_{(A ∪ R_1) ∩ R_2}(R_2))$ ==== Коммутативность операций ====
*Коммутативные операции
**$\div$, $⋇$
За счет коммутативности можем выбирать какая сторона считается левой, а какая правой. Это полезно, потому что можем не делать дублирующиеся методы, когда они не симметричны.
*Применение коммутативности
** Выбор левой и правой стороны для несимметричных методов исполнения
==== Ассоциативность операций ====
Для ассоциативных операция можем выбирать порядок в котором будет эти ассоциативные операции применять. Мы можем рассматривать не конкретное дерево, которое получилось в результате разбора, а плоский набор отношений и ассоциативные операции между ними, а дальше в каком порядке будет выполнять операции и расставлять скобки зависит уже от нас.
*Ассоциативные операции
**$\div$, $⋇$
Для ассоциативных операция можем выбирать порядок в котором будет эти ассоциативные операции применять. Мы можем рассматривать не конкретное дерево, которое получилось в результате разбора, а плоский набор отношений и ассоциативные операции между ними, а дальше в каком порядке будет выполнять операции и расставлять скобки зависит уже от нас.
*Применение ассоциативности
**Выбор порядка выполнения операций
Анонимный участник

Навигация