Если Р - предикат, то множество всех значений переменной х, при которых суждение Р становится истинным, можно символически записать следующим образом:
{х | Р(х)}
Предикаты могут соединяться с помощью логических операторов AND, OR, NOT с образованием составных предикатов.
Реляционное исчисление кортежей
В реляционном исчислении кортежей задача состоит в нахождении таких кортежей, для которых предикат является истинным. Это исчисление основано на переменных кортежа. Переменными кортежа являются такие переменные. Областью определения которых является указанное отношение – т.е. переменные, для которых допустимые значения могут быть только кортежи данного отношения. Понятие «область определения» в данном случае относится не к используемому диапазону значений, а к домену, на котором определены эти значения.
Например, для указания отношения Staff в качестве области определения переменной кортежа S используется следующая форма записи:
RANG OF S IS Saff
Кроме того. Запрос «найти множество всех кортежей S, для которых Р(S) является истинным» можно записать следующим образом:
(S | P(S))
Здесь предикат Р называется формулой.
Для указания количества экземпляров, к которым должен быть применен предикат, в формулах могут использоваться два типа кванторов. Квантор существования
- и квантор общности - .
76
Переменные кортежа называются свободными переменными, если они не квалифицируются кванторами или , в противном случае они называются связанными переменными.
Не каждая последовательность формул является допустимой. Допустимыми формулами могут быть только недвусмысленные и небессмысленные последовательности. Формула (или правильно построенная формула) в исчислении предикатов определяется следующими правилами.
Если Р является n-арной формулой, а t1, t2,...,tn – это константы или переменные, то выражение Р(t1,t2,...,tn) является правильно построенной формулой.
Если t1 и t2 являются константами или переменными из одного домена, а представляет собой один из операторов сравнения, то выражение t1 t2 является правильно построенной формулой.
Если выражения F1 и F2 являются формулами, то их конъюнкция обозначается как F1 ^ F2, дизъюнкция – F1 V F2 и отрицание – как – F1.
|
Если выражение F1 |
является |
формулой со |
свободной переменной Х, то выражение (X) |
и F(X) также |
||
являются формулами. |
|
|
|
Примеры. Реляционное исчисление кортежей
1.Создать список всех менеджеров, зарплата которых превышает 3000 руб
RANG of S is «Персонал»
{S.ФИО | S.должность = «Менеджер» ^ S.оклад > 3000 }
2.Создать список всех сотрудников, которые отвечают за работу с объектами недвижимости в Воронеже.
RANG of S is «Персонал» RANG of P is «Объекты»
{S | P (P.личн№ = S.№сотрудника ) ^ P.город = «Воронеж»}
77
Атрибут «№ сотрудника» в отношении «Объекты» содержит номер того сотрудника, который отвечает за работу с данным объектом недвижимости. Этот запрос можно сформулировать иначе: «Для всех сотрудников, данные о которых нужно привести в списке, в отношении «Объекты» имеются кортежи, соответствующие этим сотрудникам, причем значение атрибута «Город» в каждом таком кортеже равно «Воронеж».
3. Создайте список всех сотрудников, которые в данный момент не работают с объектами недвижимости.
RANG of S is «Персонал» RANG of P is «Объекты»
{S.ФИО | -( P (P.личн№ = S.№сотрудника ))}
4. Создать список всех клиентов, осматривавших объекты недвижимости в городе Воронеже, с указанием их имен и комментариев, сделанных по поводу проведенного осмотра
RANG of R is «Арендатор» RANG of P is «Объекты» RANG of V is «Осмотр»
{R.ФИО, V.комментарии | V (R.№ = V.№арендатора ) ^(V.№объекта = P.№объекта ^ P.город = «Воронеж»)}
Реляционное исчисление доменов
В реляционном исчислении доменов используются переменные, значения которых берутся из доменов, а не из кортежей отношений. Если P(d1, d2,...,dn) обозначает предикат с переменными d1, d2,...,dn , то множество всех переменных домена d1, d2,...,dn, для которых предикат или формула P(d1, d2,...,dn) истинны, обозначается следующим выражением:
{d1, d2,...,dn | P(d1, d2,...,dn) }
78
В реляционном исчислении доменов зачастую требуется проверить условие принадлежности, чтобы определить, принадлежит ли значение указанному отношению. Выражение R(x, y) считается истинным тогда и только тогда, когда в отношении R имеется кортеж со значениями x и y в двух его атрибутах.
Пример. Реляционное исчисление доменов
1. Найдите имена всех менеджеров, оклад которых превышает 3000 руб.
{фамилия, имя, отчество | должность, оклад (Персонал(фамилия, должность, оклад) ^ должность = «Менеджер» ^ оклад > 3000)}
2. Создать список всех сотрудников, которые отвечают за работу с объектами недвижимости в Воронеже.
{фамилия, имя, отчество | личный № Персонал(личный № , фамилия, имя, отчество) ^ город (Объекты (№ объекта, личный № ) ^ город = «Воронеж»)}
Эти запросы безопасны, и, если реляционное исчисление доменов ограничивается только такими выражениями, оно эквивалентно реляционному исчислению кортежей, ограниченному только безопасными выражениями, которое, в свою очередь, эквивалентно реляционной алгебре. Это означает, что для каждого выражения реляционной алгебры существует эквивалентное выражение реляционного исчисления, а для каждого выражения реляционного исчисления доменов или кортежей существует эквивалентное выражение реляционной алгебры.
79
3.5. Задания для самостоятельной работы
Задание 1.
Даны отношения, моделирующие работу банка и его филиалов. Клиент может иметь несколько счетов, при этом они могут быть размещены как в одном, так и в разных филиалах банка. В отношении R1 содержится информация обо всех клиентах и их счетах в филиалах нашего банка (табл. 3.22). Каждый клиент, в соответствии со своим счетом, может рассчитывать на некоторый кредит от нашего банка, сумма допустимого кредита также зафиксирована.
|
|
|
|
Таблица 3.22 |
|
|
Клиент |
|
|
|
|
R1 |
|
|
ФИО |
№ |
№ счета |
Остаток |
Кредит |
клиента |
филиала |
|
|
|
|
|
|
|
|
Использованием языка реляционной алгебры составить запросы, позволяющие не выбрать:
1)Филиалы, клиенты которых имеют счета с остатком, превышающим $1000.
2)Клиентов, которые имеют счета во всех филиалах данного банка.
3)Клиентов, которые имеют только по одному счету в разных филиалах банка. То есть в общем у этих клиентов может быть несколько счетов, но в одном филиале не более одного счета.
4)Клиенты, которые имеют счета в нескольких филиалах банка, расположенных только в одном районе.
5)Филиалы, которые не имени ни одного клиента.
6)Филиалы, которые имеют клиентов с остатком на счету 0 (ноль).
7)Филиалы, у которых есть клиенты с кредитом, превышающим остаток на счету в 2 раза.
80