Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2584

.pdf
Скачиваний:
1
Добавлен:
15.11.2022
Размер:
1.88 Mб
Скачать

3.4Реляционное исчисление

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

не как.

Название «Реляционное исчисление» произошло от части символьной логики, которая называется исчислением предикатов. В контексте баз данных оно существует в двух формах: в форме реляционного исчисления кортежей и в форме реляционного исчисления доменов.

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

Если предикат содержит переменную, то у этой переменной должна быть соответствующая область определения.

Если Р - предикат, то множество всех значений переменной х, при которых суждение Р становится истинным, можно символически записать следующим образом:

{х | Р(х)}

Предикаты могут соединяться с помощью логических

операторов AND, OR, NOT с образованием составных предикатов.

Реляционное исчисление кортежей

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

80

– т.е. переменные, для которых допустимые значения могут быть только кортежи данного отношения. Понятие «область определения» в данном случае относится не к используемому диапазону значений, а к домену, на котором определены эти значения.

Например, для указания отношения Staff в качестве области определения переменной кортежа S используется следующая форма записи:

RANG OF S IS Saff

Кроме того. Запрос «найти множество всех кортежей S, для которых Р(S) является истинным» можно записать следующим образом:

(S | P(S))

Здесь предикат Р называется формулой.

Для указания количества экземпляров, к которым должен быть применен предикат, в формулах могут использоваться

два типа кванторов. Квантор существования

- и квантор

общности - .

 

 

 

Переменные

кортежа

называются

свободными

переменными, если они не квалифицируются кванторами или , в противном случае они называются связанными переменными.

Не каждая последовательность формул является допустимой. Допустимыми формулами могут быть только недвусмысленные и небессмысленные последовательности. Формула (или правильно построенная формула) в исчислении предикатов определяется следующими правилами.

Если Р является n-арной формулой, а t1, t2,...,tn – это константы или переменные, то выражение Р(t1,t2,...,tn) является правильно построенной формулой.

Если t1 и t2 являются константами или переменными из одного домена, а представляет собой один из операторов

сравнения, то выражение t1

t2 является правильно

построенной формулой.

 

81

 

Если выражения 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.город = «Воронеж»}

Атрибут «№ сотрудника» в отношении «Объекты» содержит номер того сотрудника, который отвечает за работу с данным объектом недвижимости. Этот запрос можно сформулировать иначе: «Для всех сотрудников, данные о которых нужно привести в списке, в отношении «Объекты» имеются кортежи, соответствующие этим сотрудникам, причем значение атрибута «Город» в каждом таком кортеже равно «Воронеж».

82

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) }

В реляционном исчислении доменов зачастую требуется проверить условие принадлежности, чтобы определить, принадлежит ли значение указанному отношению. Выражение R(x, y) считается истинным тогда и только тогда, когда в

83

отношении R имеется кортеж со значениями x и y в двух его атрибутах.

Пример. Реляционное исчисление доменов.

1. Найдите имена всех менеджеров, оклад которых превышает 3000 руб.

{фамилия, имя, отчество | должность, оклад (Персонал(фамилия, должность, оклад) ^ должность = «Менеджер» ^ оклад > 3000)}

2. Создать список всех сотрудников, которые отвечают за работу с объектами недвижимости в Воронеже.

{фамилия, имя, отчество |

личный № Персонал(личный

№ , фамилия, имя, отчество) ^

город (Объекты (№ объекта,

личный № ) ^ город = «Воронеж»)}

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

84

3.5 Задания для самостоятельной работы

Задание 1.

Даны отношения, моделирующие работу банка и его филиалов. Клиент может иметь несколько счетов, при этом они могут быть размещены как в одном, так и в разных филиалах банка. В отношении R1 содержится информация обо всех клиентах и их счетах в филиалах нашего банка. Каждый клиент, в соответствии со своим счетом, может рассчитывать на некоторый кредит от нашего банка, сумма допустимого кредита также зафиксирована.

Таблица 22

 

R1

 

 

 

 

85

ФИО клиента

№ филиала

№ счета

Остаток

Кредит

 

 

 

 

 

 

 

 

 

 

 

Таблица 23

R2

№ филиала

Район

 

 

1)Использованием языка реляционной алгебры составить запросы, позволяющие не

выбрать:

2)Филиалы, клиенты которых имеют счета с остатком, превышающим $1000.

3)Клиентов, которые имеют счета во всех филиалах данного банка.

85

86

4)Клиентов, которые имеют только по одному счету в разных филиалах банка. То есть

вобщем у этих клиентов может быть несколько счетов, но в одном филиале не более одного счета.

5)Клиенты, которые имеют счета в нескольких филиалах банка, расположенных только

водном районе.

6)Филиалы, которые не имени ни одного клиента.

7)Филиалы, которые имеют клиентов с остатком на счету 0 (ноль).

8)Филиалы, у которых есть клиенты с кредитом, превышающим остаток на счету в 2

раза.

Задание 2.

Дины отношения, моделирующие работу международной фирмы, имеющей несколько филиалов. Филиалы фирмы могут быть расположены в разных странах, это отряжено в отношении R1. Клиенты фирмы также могут быть из разных стран, и это отражено в отношении R4. По каждому конкретному заказу клиент мог заказать несколько разных товаров.

Таблица 24

 

R1

Филиал

Страна

86

87

Таблица 25

R2

 

 

 

 

 

 

Филиал

 

Заказчик

№ заказа

 

 

 

 

 

 

 

Таблица 26

 

 

 

 

 

 

R3

 

 

 

 

 

 

№ заказа

 

 

Товар

Количество

 

 

 

 

 

 

 

Таблица 27

 

 

 

 

 

 

R4

 

 

 

 

 

 

Заказчик

 

 

Страна

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

С использованием реляционной алгебры составить запросы, позволяющие выбрать:

1) Заказчиков, которые работают со всеми филиалами фирмы, но покупают только один

товар.

2)Филиалы фирмы, которые торгуют всеми товарами.

3)Товары, которые работают с филиалами фирмы, которые расположены только в одной стране.

4)Заказчиков, которые работают с филиалами фирмы, которые расположены только в одной стране.

87

88

5)Филиалы, с которыми не работает ни один заказчик.

6)Заказчиков, которые работают только с филиалами, расположенными в той же стране, что и заказчик.

7)Заказчиков, которые покупают все товары, представленные в отношении R3.

Задание 3.

Даны отношения, моделирующие работу фирмы, занимающейся разработкой программных систем. Каждый сотрудник административно закреплен только за одним отделом. Файлы хранятся на разных серверах. На разных серверах файлы могут иметь одинаковые имена. Создатель файла является его владельцем, поэтому у каждого файла только один владелец, но владелец файла может разрешить пользоваться файлом другим сотрудникам. Существует множество системного программного обеспечения, каждая программа может работать с одним или с несколькими файлами, расположенными на одном или нескольких серверах.

Таблица 28 Таблица 29

 

R1

 

 

R4

Название файла

Имя владельца файла

 

Сотрудник

Отдел

 

 

 

 

 

Таблица 30

 

R2

 

Название программы

Название файла

Сервер

 

 

 

88

Таблица 31

 

R3

Название файла

Название сервера

 

 

С использованием реляционной алгебры составить запросы, позволяющие выбрать:

 

1)

Файлы, которые имеют нескольких пользователей из разных отделов.

 

2)

Программы, которые работают только с одним файлом.

 

3)

Файлы, которые имеют одно и тоже имя, но расположены на различных серверах и

 

используются сотрудниками разных отделов.

89

4)

Файлы, с которыми работают сотрудники всех отделов.

5)

Файлы, пользователями которых являются сотрудники только одного отдела.

 

 

6)

Программы, которые работают со всеми серверами.

 

7)

Отделы, сотрудники которых не работают ни с одним файлом. То есть отделы, в

 

которых нет ни одного сотрудника, работающего с каким-нибудь файлом.

 

8)

Отделы, сотрудники которых работают со всеми серверами.

 

9)

Серверы, с которыми работают сотрудники только одного отдела.

89

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]