Выбор из отношения на основе другого отношения - PullRequest
0 голосов
/ 08 июня 2018

Учитывая отношение A (a, b, c) и отношение B (a, d, e), используя проекцию, чтобы изолировать 'a' в 'B', например, так: B_ = projection_ {a} (B)', есть ли способ исключить все наборы в' A ', которые не имеют' a 'общего с' B '?

Обратите внимание, что я использую только реляционную алгебру, а не расширенную версию.

1 Ответ

0 голосов
/ 10 июня 2018

есть ли способ исключить все кортежи в 'A', которые не имеют 'a' общего с 'B'?

Это двойной минус: "exclude... не ... ".Давайте превратим его в положительное:

"Показать все кортежи в A, которые do имеют a общего с B."

То естьВы хотите подмножество кортежей.Здесь важно, чтобы a было единственным именем атрибута, общим для двух отношений.Затем мы начнем с Natural Join .

A ⋈ B

Это даст результат со всеми атрибутами {a, b, c, d, e}.Еще не то, что вы хотите, так что вы на правильном пути с проекцией.Я буду использовать оригинальный оператор Кодда (π).Есть два пути;они эквивалентны:

A ⋈ (π{a}( B ))            // take just {a} from B
π{a, b, c}( A ⋈ B )        // take {a, b, c} from the result of Join

Это обычно необходимая операция, поэтому есть также сокращение среди «расширенного» набора операторов, чтобы избежать этой проекции, называемой (слева) SemiJoin

A ⋉ B

Также называется «Соответствие».

...