Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных Шехтман.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
2.7 Mб
Скачать

3.2. Специальные операции ra

3.2.1. Горизонтальный выбор (горизонтальная фильтрация, ограничение отношения).

Пусть α - булевское выражение (предикат) над атрибутами отношения, например:

A1 > 10 или A2 = ‘Новокузнецк’

Отношение R[α] = {r | r  R  α( r ) = True}

МагР [Шифр товара = ‘Ф1’]:

Ф1 Бананы Привет

Ф1 Бананы Ласточка

3.2.2. Проектирование (вертикальная фильтрация).

Проекция отношения R на набор атрибутов B (записывается R[B]) – отношение, содержащее только атрибуты из B, с кортежами полученными из кортежей R путем удаления дубликатных кортежей.

Чтобы выяснить, в каких магазинах имеются в продаже Бананы и Апельсины необходимо выполнить две операции:

1. R = МагР[ Наименование товара = ‘Бананы’  Наименование Товара = ‘Апельсины’]

2. R1 = R[ Наименование магазина ]

Эти две операции можно записать в виде одной длинной, задав приоритет выполнения скобками ( и ):

R1 = ( МагР [Наименование товара = ‘Бананы’  Наименование товара = ‘Апельсины’]) [Наименование магазина]

До сих пор рассматривались унарные специальные операции. Следующие операции бинарные.

3.2.3. Условное соединение

Пусть отношение R = {r}, отношение Q = {q}. SR = (A1, …, Ak), SQ = (B1, …, Bm). Набор атрибутов A принадлежит {Ai}, i=1,k; набор атрибутов B принадлежит {Bj}, j=1,m. A и B состоят из Θ-сравнимых атрибутов.

Соединение отношений R и Q при условии β (записывается R [β] Q) – это подмножество декартова произведения RQ, кортежи которого удовлетворяют условию β.

R [β] Q = {(r, q) | (r, q) | r.A Θ q.B = True, I=1, k}

Введем в рассмотрение отношение МагП, указывающее поставщиков соответсвующих товаров:

Шифр товара Наименование товара Поставщик

Ф1 Бананы Глобус

Ф2 Арбузы Центрпродсервис

Ф3 Авокадо Голбус

Ф4 Яблоки Глобус

Ф5 Помидоры Центрпродсервис

Ф6 Фейхоа Глобус

Ф11 Ананасы Центрпродсервис

Какие продукты, из имеющихся в магазине “Привет”, были поставлены фирмой “Глобус”?

(МагП [ (МагП.Шифр товара = МагР.Шифр товара)  МагР.Наименование магазина = ”Привет”  МагП.Поставщик = “Голбус” ]) МагР [Наименование товара]:

Наименование товара

Бананы

Для демонстрации способов использования рассмотренных операций введем новые отношения:

R1 = <ФИО, Дисциплина, Оценка>

R2 = <ФИО, Группа>

R3 = <Группа, Дисциплина>

Домен атрибута Дисциплина – все дисциплины в ВУЗе

Домен атрибута Группы – все группы в ВУЗе

Домен атрибута ФИО – все студенты ВУЗа

Кто сдал экзамен по базам данных?

(R1[Дисциплина = “базы данных”]) [ФИО]

Список ФИО, сдавших на 5 “базы данных”?

(R1[Оценка=5  Дисциплина = “базы данных”]) [ФИО]

Кто должен сдавать БД?

(R2 [R3.Группа = R2.Группа  R3.Дисциплина = “базы данных”] R3) [ФИО]

Кто имеет двойки более чем по 1 дисциплине?

(R1 [R1.ФИО = R1^.ФИО  R1.Дисциплина <> R1^.Дисциплина 

R1.Оценка <= 2  R1^.Оценка <= 2] R1^) [ФИО]

Список круглых отличников?

1. Список всех пар <студент, дисциплина>:

R4 = (R2 [R2.Group = R3.Group] R3) [FIO, Discipline]

2. Список всех пар <студент, дисциплина> для которых 5:

R5 = (R1 [ Оценка = 5] ) [ FIO, Discipline ]

3. Список студентов, не сдавших что-либо на 5:

R6 = (R4 \ R5) [FIO]

4. Исключаем R6 из общего списка студентов:

R2 [ФИО] \ R6

Это и является ответом на первоначальный вопрос.

3.2.4. Деление

Пусть заданы два отношения: A со схемой (a1, a2, ..., an, b1, b2, ..., bm) и B со схемой (b1, b2, ..., bm). Будем считать, что атрибут bi отношения A и атрибут bi отношения B не только обладают одним и тем же именем, но и определены на одном и том же домене (имеют один и тот же тип). Назовем множество атрибутов {aj} составным атрибутом a, а множество атрибутов {bj} - составным атрибутом b. После этого будем говорить о реляционном делении бинарного отношения A(a,b) на унарное отношение B(b).

Результатом деления A на B является отношение C(a), состоящее из кортежей v таких, что в отношении A имеются кортежи <v, w> такие, что множество значений {w} включает множество значений атрибута b в отношении B.

Введем два отношения:

R1:

Должность Отдел

Начальник ПРОЕКТНЫЙ ОТДЕЛ

Аналитик ПРОЕКТНЫЙ ОТДЕЛ

Расчетчик БУХГАЛТЕРИЯ

Секретарь АДМИНИСТРАЦИЯ

R2 (содержит все должности в штатном расписании организации):

Должность

Начальник

Расчетчик

Секретарь

Аналитик

Инженер

Техник

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

R2 div R1:

ОТДЕЛ

ПРОЕКТНЫЙ ОТДЕЛ

БУХГАЛТЕРИЯ

АДМИНИСТРАЦИЯ