- •Лекция 2 «Реляционная модель данных»
- •Введение
- •2 Алгебраическая точка зрения
- •3 База данных
- •4 Запросы на данные
- •4.1 Стандартные теоретико-множественные операции
- •4.2 Операция декартова произведения
- •4.3 Специальные операции реляционной алгебры
- •4.3.1 Проекция
- •4.3.2 Операция ограничения (селекции)
- •4.3.3 Операция соединения
- •4.3.4 Операция деления
- •5 Ограничения целостности
4.3.4 Операция деления
Это бинарная операция. Она также может быть выражена через ранее введенные операции. Операция используется достаточно редко. Она введена для интерпретации квантора всеобщности, используемого в исчислениях отношений. Некоторые авторы считают, что она введена как операция обратная декартову произведению.
Мы представим ее конкретным примером, который можно рассматривать как прототип для ее возможных применений.
Рассмотрим ранее введенную таблицу Сдавали_экзамены и выполним ее проекцию на атрибуты Nз и Курс. Получим:
Таблица Сд_экзамены
-
Nз
Курс
121
Физика
121
Математика
121
Геометрия
123
Математика
125
Физика
125
Математика
127
Физика
127
Математика
129
Математика
Пусть нам требуется найти студентов (по Nз), которые сдавали физику и математику.
В общем случае можно рассматривать произвольный список курсов, то есть иметь дело с унарным отношением Список(Курс). В данном случае этот список включает физику и математику.
Решение поставленной задачи выполняется с помощью операции деления отношений:
Выбранные_Ст(Nз) = Сд_экзамены(Nз,Курс)[Курс÷Курс]Список(Курс).
Очевидно, что в данном случае поставленному условию удовлетворяют студенты, имеющие зачетные книжки с номерами 121, 125, 127.
Представление этой операции через ранее введенные гораздо менее очевидно, чем в случае с соединением отношений, поэтому рассмотрим весь процесс представления на нашем примере.
Прежде всего, выделим Nз студентов, которые вообще что-то сдавали:
Сд_экзамены(Nз,Курс)[ Nз]
-
Nз
121
123
125
127
129
Допустим, что каждый из них сдавал экзамены по всем курсам, включенным в список:
Сд_экзамены(Nз,Курс)[ Nз]* Список(Курс)
-
Nз
Курс
121
Физика
121
Математика
123
Физика
123
Математика
125
Физика
125
Математика
127
Физика
127
Математика
129
Физика
129
Математика
Вычтем из полученного произведения реальное отношение
Сд_экзамены(Nз,Курс)[ Nз]* Список(Курс ) \ Сд_экзамены(Nз,Курс)
-
Nз
Курс
123
Физика
129
Физика
Спроектировав результат на Nз получим список зачеток студентов, которые не сдавали все экзамены, включенные в список:
(Сд_экзамены(Nз,Курс)[Nз]* Список(Курс ) \ Сд_экзамены(Nз,Курс))[Nз]
-
Nз
123
129
Вычтя этот список из списка всех сдававших, получим то, что требуется:
Сд_экзамены(Nз,Курс)[ Nз] \ (Сд_экзамены(Nз,Курс)[ Nз]* Список(Курс ) \ Сд_экзамены(Nз,Курс))[Nз]
-
Nз
121
125
127
Этот процесс дает представление о сложности операции деления отношений.
Эту операцию можно рассматривать как обратную декартову произведению. Действительно, при любых R1 (A1, A2, … , Am) и R2 (B1, B2, … , Bn) :
(R1 * R2 ) ÷ R2 = R1