Реляционная модель: манипулирование данными. Примеры реляционных операций

Страницы работы

Содержание работы

Тема 3.1 Реляционная модель: манипулирование данными

Набор реляционных операторов принято считать реляционно полным в том смысле, что его выразительная мощность эквивалентна выразительной мощности реляционного исчисления. Теоретико-множественными операциями в реляционной алгебре частично определена алгебра множеств на множестве отношений (отсутствует операция дополнения). В реляционной алгебре частично выразимы формулы исчисления высказываний (идея квантификации неявно выражена в содержательных определениях).

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

Примеры реляционных операций

Пример. База данных содержит три таблицы:

ПОСТАВЩИКИ (КОД_ПОСТАВЩИКА, ФАМИЛИЯ, РЕЙТИНГ, ГОРОД)

ДЕТАЛИ (КОД_ДЕТАЛИ, НАИМЕНОВАНИЕ, ЦВЕТ, ВЕС, ГОРОД)

ПОСТАВКИ (КОД_ПОСТАВЩИКА, КОД_ДЕТАЛИ, КОЛИЧЕСТВО)

Транзакция1. Получить имена поставщиков детали Part-1 (Код).

1. Естественное соединение таблиц ПОСТАВЩИКИ и ПОСТАВКИ.

2. Выборка из полученного результата кортежей с атрибутом КОД_ДЕТАЛИ, равным Part-1.

3. Проекция выбранных кортежей по атрибуту ФАМИЛИЯ.

Транзакция2. Получить имена поставщиков хотя бы одной красной детали.

В транзакции изменено условие выборки ЦВЕТ = “красный”

Транзакцию можно выполнить иным образом:

1. Выборка в таблице ДЕТАЛИ кортежей, удовлетворяющих условию на цвет.

2. Проекция результата по атрибуту КОД_ДЕТАЛИ.

3. Естественное соединение полученных кортежей с таблицей ПОСТАВКИ.

4. Естественное соединение результата с таблицей ПОСТАВЩИКИ.

5. Проекция полученных кортежей по атрибуту ФАМИЛИЯ.

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

Транзакция3. Получить имена поставщиков, которые поставляют все детали.

1. Проекция1 таблицы ПОСТАВКИ по атрибутам КОД_ПОСТАВЩИКА, КОД_ДЕТАЛИ. (список поставщики-товары)

2. Проекция2 таблицы ДЕТАЛИ по атрибуту КОД_ДЕТАЛИ. (список кодов товаров)

3. Деление проекции1 на проекцию2. (Коды поставщиков, в поставках которых имеются все коды товаров).

4. Естественное соединение результата с таблицей ПОСТАВЩИКИ.

5. Проекция полученных кортежей атрибуту ФАМИЛИЯ.

Д.з. Получить номера поставщиков, которые поставляли те же детали, что и поставщик Supplier-1.

Транзакция4. Получить имена поставщиков, которые не поставляют деталь Part-2.

1. Проекция1 таблицы ПОСТАВЩИКИ по атрибуту КОД_ПОСТАВЩИКА. (список поставщиков)

2. Выборка из таблицы ПОСТАВКИ кортежей с атрибутом КОД_ДЕТАЛИ, равным Part-2.

3. Проекция2 выборки по атрибуту КОД_ПОСТАВЩИКА. (список поставщиков детали)

4. Разность проекций 1 и 2 (список тех, кто не поставляет).

5. Естественное соединение результата с таблицей ПОСТАВЩИКИ.

6. Проекция полученных кортежей атрибуту ФАМИЛИЯ.

Реляционные операторы

Реляционные операторы включены в DML для обновления БД.

Операторы INSERT и DELETE позволяют обрабатывать ситуации, которые операции объединение и разность не считают ошибочными. Например, добавление дубликата, удаление несуществующего кортежа.

INSERT критерий INTO отношение вставляет кортежи, удовлетворяющие критерию в указанное отношение.

DELETE критерий удаляет кортежи, удовлетворяющие условию.

UPDATE критерий выражение обновляет атрибуты кортежей, соответствующих критерию, в соответствии с выражением.

Например. UPDATE ПОСТАВЩИКИ WHERE ГОРОД = City-3 СТАТУС := СТАТУС + 5.

Примеры выражений реляционного исчисления

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

Транзакция. Получить  коды поставщиков со статусом больше Status-1 и расположенных в городе Sity-2.

ПОСТАВЩИКИ_X.КОД_ПОСТАВЩИКА WHERE ПОСТАВЩИКИ_X.ГОРОД = Sity-2 AND ПОСТАВЩИКИ_X.СТАТУС > Status-1

Транзакция1. Получить имена поставщиков детали Part-1 (Код).

ПОСТАВЩИКИ_X.ФАМИЛИЯ WHERE EXIST ПОСТАВКИ_X (ПОСТАВКИ_X.КОД_ПОСТАВЩИКА = ПОСТАВЩИКИ_X. КОД_ПОСТАВЩИКА AND EXIST ПОСТАВКИ_X.КОД_ДЕТАЛИ = Part-1).

Транзакция2. Получить имена поставщиков хотя бы одной красной детали.

ПОСТАВЩИКИ_X.ФАМИЛИЯ WHERE EXIST ПОСТАВКИ_X (ПОСТАВКИ_X.КОД_ПОСТАВЩИКА = ПОСТАВЩИКИ_X.КОД_ПОСТАВЩИКА AND EXIST ДЕТАЛИ_X (ДЕТАЛИ_X.КОД_ДЕТАЛИ = ПОСТАВКИ_X.КОД_ДЕТАЛИ AND ДЕТАЛИ_X.ЦВЕТ = “красный”) ).

Эквивалентная предваренная нормальная форма:

ПОСТАВЩИКИ_X.ФАМИЛИЯ WHERE EXIST ПОСТАВКИ_X (AND EXIST ДЕТАЛИ_X (ПОСТАВКИ_X.КОД_ПОСТАВЩИКА = ПОСТАВЩИКИ_X.КОД_ПОСТАВЩИКА AND ДЕТАЛИ_X.КОД_ДЕТАЛИ = ПОСТАВКИ_X.КОД_ДЕТАЛИ AND ДЕТАЛИ_X.ЦВЕТ = “красный”) ).

Транзакция3. Получить имена поставщиков, которые поставляют все детали.

ПОСТАВЩИКИ_X.ФАМИЛИЯ WHERE FORALL ПОСТАВКИ_X (AND EXIST ДЕТАЛИ_X (ПОСТАВКИ_X.КОД_ПОСТАВЩИКА = ПОСТАВЩИКИ_X.КОД_ПОСТАВЩИКА AND ДЕТАЛИ_X.КОД_ДЕТАЛИ = ПОСТАВКИ_X.КОД_ДЕТАЛИ) ).

Транзакция4. Получить имена поставщиков, которые не поставляют деталь Part-2.

ПОСТАВЩИКИ_X.ФАМИЛИЯ WHERE NOT EXIST ПОСТАВКИ_X (ПОСТАВКИ_X.КОД_ПОСТАВЩИКА = ПОСТАВЩИКИ_X.КОД_ПОСТАВЩИКА AND ДЕТАЛИ_X.КОД_ДЕТАЛИ = Part-2).

Д.з. Получить имена поставщиков, которые поставляли хотя бы одну деталь, поставляемую поставщиком Supplier-1.

Транзакция5. Получить имена поставщиков, которые поставляли те же детали, что и поставщик Supplier-1 (код).

ПОСТАВЩИКИ_X.ФАМИЛИЯ WHERE FORALL ПОСТАВКИ_Y (ПОСТАВКИ_Y.КОД_ПОСТАВЩИКА = Supplier-1 OR EXIST ПОСТАВКИ_Z (ПОСТАВЩИКИ_X.КОД_ПОСТАВЩИКА = ПОСТАВКИ_Z.КОД_ПОСТАВЩИКА AND ПОСТАВКИ_Y.КОД_ДЕТАЛИ = ПОСТАВКИ_Z.КОД_ДЕТАЛИ) ).

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

Смысл выражения: получить номера поставщиков (ПОСТАВЩИКИ_X) таких, что для всех поставок ПОСТАВКИ_Y поставка либо не от Supplier-1 либо если от Supplier-1, то существует поставка ПОСТАВКИ_Z от ПОСТАВЩИКИ_X деталей, входящих в поставку ПОСТАВКИ_Y.

Похожие материалы

Информация о работе

Предмет:
Информатика
Тип:
Конспекты лекций
Размер файла:
98 Kb
Скачали:
0