Реляционная алгебра

advertisement
РЕЛЯЦИОННАЯ
АЛГЕБРА
РЕЛЯЦИОННАЯ МОДЕЛЬ ДАННЫХ
Реляционная модель данных – самая
распространенная из существующих сейчас
моделей данных, основана на понятии
таблицы (relation), эту модель предложил в
1970 г. Э.Ф.Кодд.
 Реляционная алгебра (РА). РА представляет
собой математический аппарат для работы с
объектами-таблицами. Кроме РА, существуют
также теории реляционного исчисления на
доменах и реляционного исчисления на
кортежах, эквивалентные теории РА.

РЕЛЯЦИОННАЯ АЛГЕБРА
Операндами и результатами операций в РА
являются таблицы.
 Схема таблицы – список столбцов таблицы с их
именами и типами.


Пример реляционной модели “Поставка деталей”
(подчеркнуты ключевые поля):
ДЕТАЛЬ
ПОСТАВЩИК
КЛИЕНТ
ПОСТАВКА
(ДИмя, ДНомер, ДМодель, ДЦена)
(ПИмя, ПНомер, Город)
(КИмя, КНомер, Город)
(ДНомер, ПНомер, КНомер, Дата, Колво)
УНАРНЫЕ ОПЕРАЦИИ: ПРОЕКЦИЯ
proj
список_полей (Таблица)
Выполняется в два этапа:
 сначала выбираются нужные столбцы,
 затем вычеркиваются повторяющиеся строки.
Пример: найти все названия поставщиков и
города, в которых они находятся
proj ПИмя, Город (ПОСТАВЩИК)
УНАРНЫЕ ОПЕРАЦИИ: ВЫБОР
sel условие (Таблица)
Из таблицы выбираются только те строки,
которые отвечают заданному условию. Для
формирования сложных условий используются
логические связки AND, OR, NOT. Строкиконстанты задаются в кавычках.
Схема таблицы-результата совпадает со схемой
исходной таблицы.
Пример: найти все детали модели МС550:
sel ДМодель=”МС550”(ДЕТАЛЬ)
БИНАРНЫЕ ОПЕРАЦИИ: СОЕДИНЕНИЕ
Таблица1 join Таблица2
Для того чтобы результат существовал, нужно,
чтобы операнды имели одноименные поля. В
схему таблицы-результата входят все поля из
обеих таблиц, одноименные поля входят только
один раз.
Операция выполняется по следующим
правилам: каждая строка первой таблицы
соединяется с каждой строкой второй
таблицы, если они имеют одинаковые
значения в одноименных полях. Соединение
может выполняться по одному полю или по
нескольким полям.
БИНАРНЫЕ ОПЕРАЦИИ: СОЕДИНЕНИЕ
Пример: напечатать, какие детали и когда
поставлялись – названия деталей и даты
поставок.
proj ДИмя, Дата (ПОСТАВКА join ДЕТАЛЬ)
Пример: напечатать, какие детали и куда
поставлялись – названия деталей и города
клиентов.
proj ДИмя, Город
(КЛИЕНТ join ПОСТАВКА join ДЕТАЛЬ)
БИНАРНЫЕ ОПЕРАЦИИ: СОЕДИНЕНИЕ
Пример: напечатать имена Поставщиков и их
Клиентов (т.е., Поставщик связан с Клиентом
через Поставку).
proj ПИмя, КИмя (
proj ПНомер, ПИмя(ПОСТАВЩИК)
join ПОСТАВКА join
proj КНомер, КИмя(КЛИЕНТ) )
Пример: напечатать всевозможные пары
Поставщик-Клиент, находящиеся в одном
городе (не обязательно связанные поставками).
proj ПИмя, КИмя (ПОСТАВЩИК join КЛИЕНТ)
ОБЪЕДИНЕНИЕ, ПЕРЕСЕЧЕНИЕ, ВЫЧИТАНИЕ
Следующие три операции аналогичны
операциям над множествами.
Поскольку в РА операндами являются таблицы,
требуется, чтобы схемы обоих операндов были
одинаковыми.
Таблицы-результаты имеют те же схемы, что и
операнды.
БИНАРНЫЕ ОПЕРАЦИИ: ОБЪЕДИНЕНИЕ
Таблица1 union Таблица2
Строка попадает в результирующую таблицу,
если она присутствует или в первом, или во
втором операнде. Дубликаты в результат не
включаются.
Пример: напечатать названия городов, в которых
есть либо Поставщик, либо Клиент (хотя бы
один).
proj Город (ПОСТАВЩИК)
union
proj Город (КЛИЕНТ)
БИНАРНЫЕ ОПЕРАЦИИ: ПЕРЕСЕЧЕНИЕ
Таблица1 intersection Таблица2
Строка попадает в результирующую таблицу,
если она присутствует как в первом, так и во
втором операнде.
Пример: напечатать названия городов, в которых
есть и Поставщик, и Клиент.
proj Город (ПОСТАВЩИК)
intersection
proj Город (КЛИЕНТ)
БИНАРНЫЕ ОПЕРАЦИИ: ВЫЧИТАНИЕ
Таблица1 difference Таблица2
Строка попадает в результирующую таблицу,
если она присутствует в первом, но не
присутствует во втором операнде.
Пример: напечатать названия городов, в которых
есть Поставщики, но нет Клиентов.
proj Город (ПОСТАВЩИК)
difference
proj Город (КЛИЕНТ)
ОБЪЕДИНЕНИЕ, ПЕРЕСЕЧЕНИЕ И ВЫЧИТАНИЕ
Пример: напечатать названия городов, в которых
есть или Поставщик, или Клиент, но не оба
одновременно.
(proj Город (ПОСТАВЩИК)
union
proj Город (КЛИЕНТ) )
difference
(proj Город (ПОСТАВЩИК)
intersection
proj Город (КЛИЕНТ) )
БИНАРНЫЕ ОПЕРАЦИИ: ДЕЛЕНИЕ
Таблица1 division Таблица2
Для применения этой операции требуется, чтобы
схема второго операнда была подмножеством
схемы первого операнда. В схему результата
попадают столбцы первой таблицы, которых
нет во второй таблице.
Результат формируется следующим образом:
строка попадает в результат, если в первой
таблице она сцеплена со всеми строками
второй таблицы.
БИНАРНЫЕ ОПЕРАЦИИ: ДЕЛЕНИЕ
Таблица2
Таблица1
F1
F2
F3
F1
A
1
z
A
B
1
z
B
C
1
z
A
2
d
B
2
d
A
5
q
C
5
q
C
Таблица1 division Таблица2
F2
F3
1
z
БИНАРНЫЕ ОПЕРАЦИИ: ДЕЛЕНИЕ
Пример: получить номера Поставщиков, которые
выполняли поставки всем Клиентам из
Москвы.
proj ПНомер, КНомер (ПОСТАВКА)
division
proj КНомер
(sel Город= «Москва»(КЛИЕНТ))
БИНАРНЫЕ ОПЕРАЦИИ: УМНОЖЕНИЕ
(ДЕКАРТОВО ПРОИЗВЕДЕНИЕ)
Таблица1 product Таблица2
В схему результирующей таблицы входят все
поля обоих операндов. Поскольку имена полей
могут совпадать, используются составные
имена полей: Имя_таблицы.Имя_поля.
Результат формируется следующим образом:
каждая строка первой таблицы сцепляется с
каждой строкой второй таблицы.
Пример: получить всевозможные пары
Поставщик-Клиент.
proj ПОСТАВЩИК.ПИмя, КЛИЕНТ.КИмя
(ПОСТАВЩИК product КЛИЕНТ)
ПРИМЕР ER-МОДЕЛИ: «МУЗЫКАНТЫ»
ПРИМЕР РЕЛЯЦИОННОЙ МОДЕЛИ:
«МУЗЫКАНТЫ»
Музыканты (НомМуз, ИмяМуз, ДатаРожд, СтрРожд)
Сочинения (НомСоч, НазСоч, ДатаСоч, НомМуз)
Столбец НомМуз представляет собой ссылку на таблицу «Музыканты» и
содержит номера музыкантов- композиторов.
Исполнители (НомИсп, Инструмент, Оценка, НомМуз)
Столбец НомМуз представляет собой ссылку на таблицу «Музыканты».
Ансамбли (НомАнс, НазАнс, СтрАнс, НомМуз)
Столбец НомМуз представляет собой ссылку на таблицу «Музыканты» и
содержит номера музыкантов-руководителей ансамблей.
УчастникиАнсамблей(НомАнс, НомИсп)
Эта таблица содержит ссылки на таблицы «Ансамбли» и «Исполнители».
Исполнения (НомМуз, НомАнс, НомСоч, ДатаИсп, СтрИсп,
ГорИсп)
Таблица имеет составной первичный ключ, а также ссылки на таблицы
«Сочинения», «Музыканты» (имеются в виду дирижеры) и «Ансамбли».
ЗАДАНИЯ ПО МОДЕЛИ «МУЗЫКАНТЫ»:








Получить имена музыкантов, которые играют или на
кларнете, или на барабане.
Получить имена музыкантов, которые играют и на
кларнете, и на барабане.
Получить имена музыкантов, которые играют на кларнете,
но не играют на барабане.
Получить имена музыкантов, которые играют или на
кларнете, или на барабане, но не на обоих инструментах.
Получить имена музыкантов, которые не играют ни на
каких инструментах.
Получить имена музыкантов, которые играют только на
кларнете.
Получить имена музыкантов, которые играют на всех
инструментах, упомянутых в таблице «Исполнители» .
Получить названия ансамблей, которые исполняли
Моцарта на саксофоне.
ЗАДАНИЯ ПО МОДЕЛИ «МУЗЫКАНТЫ» 1

Получить имена музыкантов, которые играют или
на кларнете, или на барабане.
1)proj ИмяМуз (
proj НомМуз (
sel Инструмент=«Кларнет» (Исполнители))
union
proj НомМуз (
sel Инструмент=«Барабан» (Исполнители))
join Музыканты)
2)proj ИмяМуз (Музыканты join
sel Инструмент=«Кларнет» OR
Инструмент=«Барабан»(Исполнители))
Proj ИмяМуз
Join
Union
Proj НомМуз
Sel
Инструмент
=«Кларнет»
Исполнители
Музыканты
Proj НомМуз
Sel
Инструмент
=«Барабан»
Исполнители
ЗАДАНИЯ ПО МОДЕЛИ «МУЗЫКАНТЫ» 2

Получить имена музыкантов, которые играют и на
кларнете, и на барабане.
proj ИмяМуз (
proj НомМуз (
sel Инструмент=«Кларнет» (Исполнители))
intersection
proj НомМуз (
sel Инструмент=«Барабан» (Исполнители))
join Музыканты)
ЗАДАНИЯ ПО МОДЕЛИ «МУЗЫКАНТЫ» 3

Получить имена музыкантов, которые играют на
кларнете, но не играют на барабане.
proj ИмяМуз (
proj НомМуз (
sel Инструмент=«Кларнет» (Исполнители))
difference
proj НомМуз (
sel Инструмент=«Барабан» (Исполнители))
join Музыканты)
ЗАДАНИЯ ПО МОДЕЛИ «МУЗЫКАНТЫ» 4

Получить имена музыкантов, которые играют или на
кларнете, или на барабане, но не на обоих
инструментах.
proj ИмяМуз (Музыканты join (
(proj НомМуз (sel Инструмент=«Кларнет» (Исполнители))
union
proj НомМуз (sel Инструмент=«Барабан» (Исполнители)))
difference
(proj НомМуз (sel Инструмент=«Кларнет» (Исполнители))
intersection
proj НомМуз (sel Инструмент=«Барабан» (Исполнители)))
)
)
Proj ИмяМуз
Join
Difference
Proj НомМуз
Sel Инструмент
=«Кларнет» OR
Инструмент
=«Барабан»
Исполнители
Музыканты
Intersection
Proj НомМуз
Proj НомМуз
Sel
Инструмент
=«Кларнет»
Исполнители
Sel
Инструмент
=«Барабан»
Исполнители
ЗАДАНИЯ ПО МОДЕЛИ «МУЗЫКАНТЫ» 5

Получить имена музыкантов, которые не играют
ни на каких инструментах.
proj ИмяМуз (Музыканты join
(proj НомМуз (Музыканты)
difference
proj НомМуз (Исполнители))
Proj ИмяМуз
Join
Difference
Proj НомМуз
Музыканты
Музыканты
Proj НомМуз
Исполнители
ЗАДАНИЯ ПО МОДЕЛИ «МУЗЫКАНТЫ» 6

Получить имена музыкантов, которые играют
только на кларнете.
proj ИмяМуз (Музыканты join
(proj НомМуз (Исполнители)
difference
proj НомМуз
sel Инструмент!=«Кларнет» (Исполнители)
)
Proj ИмяМуз
Join
Difference
Proj НомМуз
Исполнители
Музыканты
Proj НомМуз
Sel
Инструмент
=«Кларнет»
Исполнители
ЗАДАНИЯ ПО МОДЕЛИ «МУЗЫКАНТЫ» 7

Получить имена музыкантов, которые играют на
всех инструментах, упомянутых в таблице
«Исполнители» .
proj ИмяМуз (Музыканты join
(proj НомМуз, Инструмент (Исполнители)
division
proj Инструмент (Исполнители)
)
Proj ИмяМуз
Join
Division
Proj НомМуз,
Инструмент
Исполнители
Музыканты
Proj Инструмент
Исполнители
ЗАДАНИЯ ПО МОДЕЛИ «МУЗЫКАНТЫ» 8

Получить названия ансамблей, которые исполняли
Моцарта на саксофоне.
proj(11) НазАнс (
proj(3) НомСоч (Сочинения join(2)
sel(1) ИмяМуз='Моцарт' (Музыканты))
join(9)
proj(8) НомСоч, НомАнс
(proj(5) НомИсп
(sel(4) Инструмент ='Саксофон' (Исполнители))
join(6) УчАнс join(7) Исполнения)
join(10) Ансамбли)
Proj НазАнс
Join
Join
Proj НомСоч
Ансамбли
Proj НомСоч,НомАнс
Join
Sel ИмяМуз
=«Моцарт»
Join
Сочинения
Join
Proj НомИсп
Музыканты
Исполнения
УчАнс
Sel
Инструмент
=«Саксофон»
Исполнители
Download