45
правок
Изменения
→Перезапись запроса
Преобразование подзапросов
*Преобразуются в реляционную алгебру
** Запись в реляционном исчислении
** Вынос кванторов
** Преобразование в алгебру
Преобразование соединений
*Внешние соединения
**$R_1 \ojoin_θ R_2 ⇒ (R_1 \ljoin_θ R_2) ∪ (R_1 \rjoin_θ R_2)$
**$R_1 \ljoin_θ R_2 ⇒ σ_θ(R_1 × R_2) ∪ (R_1 - π_{R_1}(σ_θ(R_1 × R_2)))$
**$R_1 \rjoin_θ R_2 ⇒ σ_θ(R_1 × R_2) ∪ (R_2 - π_{R_2}(σ_θ(R_1 × R_2)))$
*Декартово соединение
**$R_1 × R_2 ⇒ R_1 ⋈ R_2$
=== Унарные операции ===
Повторная фильтрация
*Правило
**Повторное применение фильтрации заменяется одинарным
**$σ_{cond_1}(σ_{cond_2}(R)) ⇒ σ_{cond_1 ∧ cond_2}(R)$
*Пример
**$π_{FirstName}(σ_{Name=M34391}(σ_{S.GId=G.GId}(S × G))) ⇒ π_{FirstName}(σ_{Name=M34391 ∧ S.GId=G.GId}(S × G))$
Повторная проекция
*Правило
**Повторное применение проекции заменяется внешней
**$π_{A}(π_{B}(R)) ⇒ π_{A}(R)$
*Пример
**$π_{FirstName}(π_{FirstName, Name}(S × G)) ⇒ π_{FirstName}(S × G)$
Проекция и фильтрация
*Правило
**Фильтрация осуществляется до проекции
**$σ_{cond}(π_{A}(R)) ⇒ π_{A}(σ_{cond}(R))$
*Пример
** $π_{FirstName}(σ_{Name=M34391}(π_{FirstName, Name}(S × G))) ⇒ $
** $π_{FirstName}(π_{FirstName, Name}(σ_{Name=M34391}(S × G))) ⇒ $ $π_{FirstName}(σ_{Name=M34391}(S × G))$ Так можно делать всегда
** $π_{FirstName}(σ_{Name=M34391}(S × G))$
=== Алгебраические свойства операций ===
Дистрибутивность операций
*Фильтрация
**$σ_{cond}(R_1 ∪ R_2) ⇒ σ_{cond}(R_1) ∪ σ_{cond}(R_2)$
**$σ_{cond}(R_1 \cap R_2) ⇒ σ_{cond}(R_1) \cap σ_{cond}(R_2)$
**$σ_{cond}(R_1 - R_2) ⇒ σ_{cond}(R_1) - σ_{cond}(R_2)$
**$σ_{cond_1 ∧ cond_2}(R_1 ⋈ R_2) ⇒ σ_{cond_1}(R_1) ⋈ σ_{cond_2}(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(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))$
Коммутативность операций
Замыкание предикатов
*Примеры правил
**$a = b ∧ b = c ⇒ a = b ∧ b = c ∧ a = c$
**$a > b ∧ b = c ⇒ a > b ∧ b = c ∧ a > c$
**$a > b ∧ b > c ⇒ a > b ∧ b > c ∧ a > c$
*Пример
**$σ_{P_1.p > P_2.p ∧ P_2.p ≥ 60}(P_1 ⋈_{P_1.SId = P_2.SId} P_2) ⇒$
**$σ_{P_1.p > P_2.p ∧ P_2.p ≥ 60 ∧ P_1.p > 60}(P_1 ⋈_{P_1.SId = P_2.SId} P_2) ⇒$
**$σ_{P_1.p > P_2.p}(σ_{p > 60}(P_1) ⋈_{P_1.SId = P_2.SId} σ_{p ≥ 60}(P_2))$
КНФ и ДНФ