Изменения

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

Реляционная алгебра: соединения, деление

463 байта добавлено, 13:42, 26 декабря 2021
Нет описания правки
{{Определение
|definition=
Пусть даны отношения <tex>A</tex> с заголовком <tex>X \cup Y</tex> и отношение <tex>B</tex> с заголовком <tex>Y \cup Z \,\,\,\, (X \cap Z = \varnothing)</tex>. Тогда '''большим делением''' (англ. ''Great division'') <tex>A</tex> на <tex>B</tex> называется максимальное по включению отношение с заголовком <tex>X \cup Z</tex>, такое что для каждого <tex>(x, z) \in X \cup times Z</tex> верно <tex>\{x\} \times \pi_Y(\sigma_{Z=z}(B)) \subseteq A</tex>. Обозначение: <tex>A ⋇ B</tex>
}}
===Пример===
|Иван
|Иванов
|-
|Иван
|Петров
|-
|Пётр
|Иванов
|-
|ИванПётр
|Петров
|-
|Пётр
|ПетровСидоров
|-
|Сидор
|Петров
|-
|Пётр
|Сидоров
|-
|Сидор
|Сидоров
|}
''Объяснение:.''Чтобы найти результат большого деления, переберём всевозможные <tex>(x, z) \in X \times Z</tex>. В нашем случае <tex>X = \{(Иван), (Пётр), (Сидор)\}, Z = \{(Иванов), (Петров), (Сидоров)\}</tex>. Возьмём <tex>(x, z) = (Иван, Иванов)</tex>. Тогда <tex>\pi_Y(\sigma_{Z=Иванов}(B)) = \{(1), (2)\}</tex>. Тогда <tex>\{Иван\} \times \pi_Y(\sigma_{Z=Иванов}(B)) = \{(1, Иван), (2, Иван)\}</tex>, что является подмножеством <tex>A</tex>. Значит, <tex>(Иван, Иванов)</tex> есть в результате большого деления.
Зафиксируем Возьмём <tex>LastName (x, z) = Иванов(Иван, Петров)</tex>. Отфильтровав по этому условию отношение Тогда <tex>\pi_Y(\sigma_{Z=Петров}(B)) = \{(1)\}</tex>, получим . Тогда <tex>Id \{Иван\} \times \pi_Y(\sigma_{Z=Петров}(B)) = \{(1, 2Иван)\}</tex>. Поделив отношение , что является подмножеством <tex>A</tex> на это. Значит, получим <tex>FirstName = \{(Иван, Пётр\}Петров)</tex>. Поэтому есть в ответе есть ''Иван Иванов'' и ''Пётр Иванов''результате большого деления.
Зафиксируем Возьмём <tex>LastName (x, z) = Петров(Иван, Сидоров)</tex>. Отфильтровав по этому условию отношение Тогда <tex>\pi_Y(\sigma_{Z=Сидоров}(B)) = \{(3)\}</tex>, получим . Тогда <tex>Id \{Иван\} \times \pi_Y(\sigma_{Z=Сидоров}(B)) = \{1(3, Иван)\}</tex>. Поделив отношение , что '''не''' является подмножеством <tex>A</tex> на это. Значит, получим элемента <tex>FirstName = \{(Иван, Пётр, Сидор\}Сидоров)</tex>. Поэтому нет в ответе есть ''Иван Петров'', ''Пётр Петров'' и ''Сидор Петров''результате большого деления.
Зафиксируем Аналогично перебираются 6 оставшихся элементов <tex>LastName = Сидоров</tex>. Отфильтровав по этому условию отношение <tex>B</tex>, получим <tex>Id = \{3\}</tex>. Поделив отношение <tex>A</tex> на это, получим <tex>FirstName = \{Пётр, СидорX \}times Z</tex>. Поэтому в ответе есть ''Пётр Сидоров'' и ''Сидор Сидоров''.
===Свойства===
9
правок

Навигация