logo
Prolog

Основные операции реляционной алгебры.

Пять основных операций определяют реляционную алгебру: объединение, симметрическая разность, декартово произведение, проекция и выборка. Покажем, как каждая из них выражается в логической программе.

Операция объединения строит одно n-арное отношение из двух n-арных отношений r и s. Новое отношение, которое обозначим r_union_s, является объединением r и s. Это отношение задается логической программой, состоящей из двух правил:

r_union_s (X1, X2, X3, …..Xn):- r (X1, X2, X3,……Xn).

r_union_s (X1, X2, X3, …..Xn):- s (X1, X2, X3,……Xn).

Пример:

блюдо (Х):- мясо (Х).

блюдо (Х):- рыба (Х).

Из примера следует, что объединение отношений можно использовать для обобщения знаний о предметной области.

Определение симметрической разности использует понятие отрицания:

АВ=(А∩¬В)υ(¬А∩В).

r_diff_s (X1, X2, X3, …..Xn):- r (X1, X2, X3,……Xn),

not s (X1, X2, X3,……Xn).

r_diff_s (X1, X2, X3, …..Xn):- s (X1, X2, X3,……Xn),

not r (X1, X2, X3,……Xn).

Пример:

футболист_либо_волейболист (Х):- футболист (Х),

not волейболист (Х).

футболист_либо_волейболист (Х):- волейболист (Х),

not футболист (Х).

Декартово произведение r_x_s может быть определено одни правилом:

r_х_s (X1, X2, X3, …..Xm, Y1, Y2, Y3,……., Yn):- r (X1, X2, X3,……Xm),

s (Y1, Y2, Y3,……., Yn).

Пример:

обед (X,Y,Z):- закуска (X), блюдо (Y), десерт (Z).

Проекция состоит в построении отношения. Использующего лишь некоторые аргументы исходного отношения:

r13 (X1, X3):- r (X1, X2, X3).

Пример:

аптека (6, «Невский, 110», «44-67-57»).

телефон_аптеки (NomApt, TelApt):-

аптека (NomApt, _, TelApt).

Чтобы получить выборку, достаточно в теле правила записать условия отбора:

аптека (6, «Невский, 110», «44-67-57»).

телефон_аптеки (NomApt, TelApt):-

аптека (NomApt, _, TelApt), NomApt <8.

калории («артишоки», 150).

значение (X, Y, Z):- калории (X, E),

калории (Y, P),

калории (Z, D),

V=E+P+D.

обед (X,Y,Z):- закуска (X), блюдо (Y), десерт (Z).

сбалансированный_обед (X,Y,Z):- обед (X, Y, Z), значение (X, Y, Z, V), V < 800.

Операция соединения двух или нескольких отношений определяется следующим образом:

факультет (NG, F) :- вторая_цифра (NG, G2), наим_фак (G2, F).

Здесь два отношения связаны общей переменной G2.