- •ПРЕДИСЛОВИЕ
- •Глава 1. Основы реляционной модели данных
- •1.1. Отношения
- •1.2. Алгебра отношений
- •1.2.1. Теоретико-множественные операции
- •1.2.2. Специальные операции
- •1.3. Предпосылки введения исчисления отношений
- •1.3.1. Пример исполнения запросов
- •1.4. Исчисление отношений и SQL
- •2.2. Типы данных и язык определения схем DDL
- •2.3. Создание базы данных
- •3.1. Определение таблицы CREATE TABLE
- •3.1.1. Обозначения в синтаксических конструкциях
- •3.1.2. Определение столбца
- •3.1.3. Переопределение имени столбца AS
- •3.2. Определение представлений (VIEW обзоров)
- •3.3. Определение прав доступа (привилегий)
- •4.1. Структура запросов
- •4.1.1. Команда SELECT
- •4.1.2. Описание SELECT
- •4.1.3. Сортировка результирующей таблицы
- •4.1.4. Удаление повторяющихся данных
- •4.2. Использование фразы WHERE
- •4.3. Операторы IN, BETWEEN, LIKE в фразе WHERE
- •4.4. GROUP BY и агрегатные функции SQL
- •4.6. Упорядочение вывода по номеру столбца
- •5.1.1. Естественное соединение таблиц (natural join)
- •5.1.2. Эквисоединение таблиц
- •5.1.3. Декартово произведение таблиц
- •5.1.4. Соединение с дополнительным условием
- •5.3.Структурированные запросы
- •5.3.1. Виды вложенных подзапросов
- •5.3.2. Простые вложенные подзапросы
- •5.3.3. Коррелированные вложенные подзапросы
- •5.3.4. Запросы, использующие EXISTS
- •5.3.5. Использование функций в подзапросе
- •6.2. Инструкция INSERT
- •6.2.1. Добавление одной строки в таблицу
- •6.2.2. Добавление нескольких строк
- •6.3.2. Удаление нескольких строк
- •6.4. Инструкция UPDATE
- •6.4.1. Модификация одной записи
- •6.4.2. Модификация нескольких строк
- •Заключение
- •Библиографический список
Рассмотренная алгебра, безусловно, имеет преимущества, но требует от пользователя четкого представления (алгоритма) выполнения операций алгебры, возлагая тем самым на пользователя вопросы эффективности реализации запроса. Указанный недостаток в некоторой мере устранен в реляционном исчислении.
Четкость в последовательности действий при обработке запроса характеризует степень " процедурности " средств, используемых для его формулировки. Говорят, что алгебра отношений лежит в основе процедурных языков манипулирования данными в реляционной модели БД.
1.3. Предпосылки введения исчисления отношений
Реляционная алгебра определяет набор операций (алгебраических), которые должны быть реализованы системой для получения ответа на запрос.
Взаимодействуя с системой на языке алгебры отношений, пользователь должен уметь манипулировать соответствующими операциями реляционной алгебры при конструировании запросов. При этом от пользователя-непрофессионала требуются определенные знания в области математики, и на него же возлагаются вопросы, связанные с построением таких запросов на языке алгебры, которые для своей реализации требовали бы минимальное время.
Пусть, например, есть база данных (БД), состоящая из следующих отношений (рис.
1.7).
Запрос к базе:
Найти шифры цехов (N цеха), которые изготавливают все детали (Шифр изделия), выпускаемые на данном предприятии.
Для реализации данного запроса пользователь может построить несколько вариантов предложений на языке алгебры отношений.
Например, запрос типа:
1) Rrez(N цеха) = (R3[N цеха, Шифр изд.] х° R2[N цеха]) ÷ R1[Шифр изд.]
или
2) Rrez(N цеха)=(R3[N цеха, Шифр изд.] ÷ R1[Шифр изд.]) х° R2[N цеха]
Здесь х° - символ операции эквисоединения ÷ - символ операции деления
При реализации запроса типа 1 или 2 СУБД будет строго придерживаться порядку операций, предписанных в предложении. При этом существенна в данном случае операция ÷ (деление):
R [A ÷ O] S=R [Ã] \ ((R [Ã] × S [B]) \ R)[Ã],
так как она и будет определять время выполнения данного запроса.
Рассмотрим процесс выполнения запроса для предложения типа 1 и типа 2 для нашего примера. При этом атрибут N цеха обозначим "Nц", атрибут Шифр изделия обозначим как "Ш".
1.3.1. Пример исполнения запросов
ВЫПОЛНЕНИЕ ЗАПРОСА ТИПА 1.
Rrez(Nц)=(R3 [Nц, Ш] х° R2 [Nц]) ÷ R1 [Ш]
Первый шаг.
R4=R3 x° R2 R4 (Nц, Ш ) N1 Ш1 N1 Ш2 N2 Ш1 N2 Ш2 N2 Ш3
Второй шаг.
R4|R1 = R4 [Nц] \ ((R4 [Nц] × R1 [Ш]) \ R4)[Nц] a) R4 [Νц] = R5 [Nц]
N1
N2
б) R4 [Nц] × R1 [Ш] = R5 × R1 [Ш]=R6 R6(Nц, Ш)
N1 Ш1
N1 Ш2
N1 Ш3
N2 Ш1
N2 Ш2
N2 Ш3
в) R6 \ R4 = R7 R7(Nц, Ш )
N1 Ш3
г) R7 [Nц] = {N1} = R8(Nц)
д) R4 [Nц] \ R8 = Rrez = R5 \ R8
Rrez= Nц |
R5(Nц) \ R8(Nц) |
|
N2 |
N1 |
N1 |
|
N2 |
|
ВЫПОЛНЕНИЕ ЗАПРОСА ТИПА 2
Rrez (Nц) = (R3 [Nц, Ш)] ÷ R1 [Ш]) x° R2 [Nц]
R3 [Nц, Ш] ÷ R1 [Ш] = R3 [Nц] \ ((R3 [Nц] × R1 [Ш]) \ R3)[Nц]
a) R3 [Nц] = R4 [Nц] (промежуточное отношение) N1
N2
б) R3 [Nц] × R1 [Ш] = R4 × R3 [Ш] = R5(Nц, Ш ) N1 Ш1 N1 Ш2 N1 Ш3 N2 Ш1 N2 Ш2 N2 Ш3
в) R5 \ R3 = R6(Nц, Ш) N1 Ш3
г) R6 [Nц] = {N1}
д) R3 [Nц]\R6(Nц) = R7 = {N2}
e) Rrez = R7(Nц) x° R2 [Nц] = R7(Nц) x° R2 [Nц]
N2 |
N1 |
|
N2 |
Rrez=N2
