Нехай задана реляція R(aR), де aR - множина імен атрибутів;
M1 = {A1, …, Am} Í aR; і
M2 = {B1, …, Bm} Í aR - списки атрибутів з властивістю N(Ai) = N(Bi); i = 1,m;
q - обмеження реляції R по спискам M1 і M2 : R[M1 q M2] = {r | (r Î R) &(r[M1] q r[M2])}.
Операція ділення.
Нехай задана реляція R(A1, …, Ak) і два взаємнодоповнюючі списки атрибутів
M1 = {A1, …, An}; M2 = {An+1, …, Ak}
Нехай є С1 = D1´…´Dn; С2 = Dn+1´…´Dk; де Di = N(Ai), i = 1,k;
Якщо візьмемо деякий елемент x Î С1, то образом x по реляції R буде називатись множина підкортежів:
imRx = {y Î С2 | (x, y) Î R}
Розглянемо реляції R(aR), S(aS) і списки атрибутів {A1, …, An}ÍaR ; {B1, …, Bn}ÍaS;
Необхідно, щоб реляції R[A1, …, An] і S[B1, …, Bn] були сумісними, тоді операція R[A ¸ B]S називається діленням R на S по спискам {A1, …, An} і {B1, …, Bn}
Результатом є множина підкортежів по атрибутам, що доповнюють список {A1, …, An}.
R[A ¸ B]S = {r[An+1, …, Ak] | (r Î R) & (S[B1, …, Bn] Í imR(r[An+1, …, Ak]))}
Приклад використання операції ділення.
Нехай задана таблиця R з двома атрибутами (мова програмування і прізвище програміста, який цією мовою володіє)
Знайти прізвища програмістів, які знають мови А і Ф одночасно. Для виконання такого запиту утворимо допоміжну реляцію S з одним атрибутом і двома кортежами з відповідними значеннями кодів мов програмування {А,Ф}.
R[мова ¸ мв]S
R | Мова | Прізв | S | мв | |
А | І | А | |||
А | П | Ф | |||
ПЛ | С | ||||
Ф | Ф | ||||
Ф | І | ||||
Ф | С | ||||
ПЛ | П | ||||
П | Ф | ||||
П | І |
Образом І буде {А, Ф, П}, що є надмножиною відносно{А, Ф}, тому І проходить у результуючу таблицю; а П, С, Ф – не проходять у результуючу таблицю, бо їх образи не накривають {А, Ф}. Це означає, що програміст І знає мови {А,Ф} (можливо ще щось), а інші не знають цих мов одночасно.
Інформаційні технології та інформаційні системи