Деление
Определение
Частным от деления отношения r1(R1) на отношение r2(R2), для которых R2 Í R1 и R2 не пусто, называется отношение s(R) = r1 ¸ r2, для которого:
- схема отношения R = R1 – R2,
- реализация отношения есть множество кортежей t таких, что для всех ti Î r2 существует tj Î r1 такой, что tj(R1 – R2) = t и tj(R2) = ti.
Формальная запись:
Даны r1(R1), r2(R2), R2 Í R1, R2 ¹ 0.
s(R) = r1 ¸ r2, R = R1 – R2, s = {tj | " u Î r2 (tju Î r1)}
Другими словами, s ´ r2 Î r1.
Можно написать выражение реляционной алгебры, эквивалентное операции деления:
r1 ¸ r2 = pR1-R2(r1) – pR1-R2((pR1-R2(r1) ´ r2) – r1)
Пример:
r1 | (A | B | C | D | r2 | (C | D) | s = r1 ¸ r2 | (A | B) | ||
a | b | c | d | c | d | b | c | |||||
a | b | c | f | e | f | e | d | |||||
b | c | e | f | |||||||||
b | c | c | d | |||||||||
e | d | e | f | |||||||||
e | d | c | d |
Действительно, кортежи <bccd>, <bcef>, <edcd> и <edef> есть в отношении r1. Кортеж <abcd> есть в отношении r1, но кортежа <abed> нет, поэтому в s нет кортежа <ab>.
|
|
Рассмотрим некоторые примеры написания запросов к БД на языке реляционной алгебры.
Пусть дана следующая схема БД:
S(S#, SN, SC) – ПОСТАВЩИК (Номер поставщика, Имя, Город)
P(P#, PN, PC) – ДЕТАЛЬ (Номер детали, Название, Цена)
SP(S#, P#, QTY) – ПОСТАВКА (Номер поставщика, Номер детали, Количество)
1. Получить имена поставщиков, поставляющих деталь с номером P1.
pSN(sP#=P1(S SP))
2. Получить имена поставщиков, не поставляющих деталь с номером P1.
pSN(S) – pSN(sP#=P1(S SP))
3. Получить имена поставщиков, поставляющих только деталь с номером P1.
pSN(sP#=P1(S SP)) – pSN(sP#¹P1(S SP))
4. Получить имена поставщиков, поставляющих все детали.
pSN((pS#,P#(SP) ¸ pP#(P)) S)