
- •7. Реляционная алгебра
- •7.1. Типы и языки запросов
- •7.2. Реляционная алгебра (алгебра отношений)
- •7.2.1. Проекция
- •7.2.2. Выборка
- •7.2.3. Соединение
- •7.2.4. Объединение
- •7.2.5. Пересечение
- •7.2.6. Вычитание
- •7.2.7. Умножение
- •7.2.8. Деление
- •7.3. Примеры запросов на реляционном языке
- •Вопросы для самоконтроля
7.2.8. Деление
Операция определена для отношений R(X, Y) и S(Z), где X, Y , Z - множества атрибутов отношений R и S, причем Y=Z. Результат деления R[YZ]S является отношением, в котором множество кортежей r[X] таково, что r[X],sR(X,Y), где s S(Z):
R[YZ]S={ r[X] | r[X],sR(X,Y) s S(Z) }.
Справедливо следующее выражение:
(R[YZ]S S) R.
X Y Z
Например, если |
G2 |
G1 |
F1 |
|
G1 |
F1 |
|
|
A |
d |
3 |
|
d |
3 |
|
R = |
A |
h |
7 |
, S = |
h |
7 |
, |
|
B |
r |
3 |
|
|
|
|
|
B |
h |
7 |
|
|
|
|
|
C |
h |
7 |
|
|
|
|
то
|
G2 |
|
R[YZ]S = |
A |
. |
|
B |
|
Значение С поля G2 не вошло в результат, поскольку в R отсутствует кортеж < C, d, 3>. Дополнительно проверить правильность отсутствия значения С в результате можно умножением:
|
G2 |
|
G1 |
F1 |
|
G2 |
G1 |
F1 |
|
a) |
A |
|
d |
3 |
= |
A |
d |
3 |
|
|
B |
|
h |
7 |
|
A |
h |
7 |
R; |
|
C |
|
|
|
|
B |
d |
3 |
|
|
|
|
|
|
|
B |
h |
7 |
|
|
|
|
|
|
|
C |
d |
3 |
|
|
|
|
|
|
|
C |
h |
7 |
|
б) (R[YZ]S S) R.
С помощью рассмотренных операций реляционной алгебры можно формулировать запросы к БД для получения необходимой информации, а проекция используется для нормализации отношений.
Нормализация проводится с целью удаления избыточных данных из каждой таблицы в БД.
7.3. Примеры запросов на реляционном языке
Год рождения жителя с номером 199 определяется запросом
(person[nom=199])[Rdate]
Сведения о жителях, проживающих в квартире с адресом 901-15, можно получить по запросу
person[Adr=‘901-15’]
Все сведения о жителе №199 определяется запросом
((((person[nom=199])[Adr=Adr]tphone)[nom=nom]Have_D)[Id=Id]Profit)
Список дат рождения и адресов для всех жителей обеспечивается запросом
person[Rdate, Adr].
Определить для каждого жителя источник дохода, дающий больше 500 рублей, можно с помощью запроса
((Have_D[Id=Id]Profit)[money>500]))[nom, source]
Реляционная алгебра не является “дружественным” языком, поскольку выражения реляционной алгебры не всегда понятны и привычны обычному пользователю.
Как правило, реляционная алгебра используется для внутреннего представления запросов, а для взаимодействия с БД были разработаны языки запросов, ориентированные на пользователя, например, QBE (Query-By-Example) и SQL. Наиболее популярным языком является SQL, ставший стандартом для реляционных СУБД.
Вопросы для самоконтроля
Дайте математическое определение и приведите пример выполнения операции проекции над отношением.
Дайте математическое определение и приведите пример выполнения операции выборки над отношением.
Дайте математическое определение и приведите пример выполнения операции соединения над отношениями.
Дайте математическое определение и приведите пример выполнения операции объединения над отношениями.
Дайте математическое определение и приведите пример выполнения операции пересечения над отношениями.
Дайте математическое определение и приведите пример выполнения операции вычитания над отношениями.
Дайте математическое определение и приведите пример выполнения операции умножения над отношениями.
Используя операции реляционной алгебры, для учебной базы данных, рассмотренной как пример в теоретических сведениях к самостоятельной работе №6, написать запросы, которые извлекают следующую информацию:
а) список фамилий, имен, отчеств и дат рождения для всех жителей квартиры с адресом 901-15;
б) список жителей, имеющих телефоны;
в) список названий источников дохода, имеющихся у жителей квартиры с адресом 901-15.