Pull to refresh

Comments 8

Материал по Реляционной Алгебре в виде простой вики страницы/студенческой шпаргалке http://iu5bmstu.ru/index.php/%D0%A2%D0%9E%D0%A0%D0%90_%289%29_-_%D0%A1%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80_%E2%84%961_-_%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%BB%D1%8F%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D1%8B
А как в формальную логику принято транслировать outer join конструкции? Например LEFT JOIN?
Подвох в том, что нужно добавлять специальный элемент: «null value» ω.

В реляционной алгебре, например вот так:
en.wikipedia.org/wiki/Relational_algebra#Outer_joins

В случае, если мы добавили специальный элемент ω, то можно эмулировать left outer join. Например вот так, пусть P(x,z) и Q(z,y) предикаты тогда запрос выражает left outer join (возможно, можно проще)

{ p.X p.Z, q.Y | P(p) and ( (Q(q) and q.Z = p.Z) or (not Q(q) and q.Y = ω and ~∃s: Q(s) and s.Z = p.Z) ) }

Либо, всё хорошо и мы добавили p.X, p.Z., q.Y (существует соответствующие p.Z и q.Z), либо положи вместо q.Y null (такого Z для Q не существует).
два чая тому господину, который покажет, что алгебра строго более выразима с оператором переименования (нужно привести пример запроса, который не выразим без этого оператора, но выразим с )


Зачем пример, достаточно
ограничение — одинаковые аттрибуты


А если брать обычный SQL, то прежде всего переименование столбцов необходимо в подзапросах для избежания совпадения имён из разных таблиц.
Ну ок, это ответ на один чай из двух, потому что всегда можно было бы сказать: это неправильная схема, дадим разные имена колонкам в разных таблицах и проблема решена. Но оказывается, даже это не спасает в определенных случаях (достаточно приглядеться к первой таблице внимательно, чтобы понять в каких)
Sign up to leave a comment.

Articles