- •Информация и данные
- •Основные понятия систем с базами данных
- •Пользователи информационной системы с БД
- •Требования к информационным системам с базами данных
- •Основные компоненты ИС с базами данных
- •Архитектура систем с базами данных. Понятие модели данных
- •Сущности и их свойства
- •Связи (отношения) между сущностями
- •Виды связей между сущностями
- •Еще о сущностях, их свойствах и связях между ними
- •Модели данных. Ранние подходы к организации баз данных
- •Основные понятия реляционной модели данных
- •Структуры данных реляционной модели. Реляционные отношения
- •Свойства отношений
- •Отсутствие в отношении одинаковых кортежей
- •Кортежи отношения не упорядочены (сверху вниз)
- •Атрибуты отношения не упорядочены (слева направо)
- •Значения всех атрибутов являются атомарными
- •Виды отношений
- •Реляционная база данных
- •Реляционная модель. Операции над данными
- •Реляционная алгебра
- •Пересечение отношений
- •Вычитание отношений
- •Декартово произведение отношений
- •Проекция
- •Выборка (ограничение)
- •Естественное соединение отношений
- •Деление
- •Реляционное исчисление
- •Примеры правильно построенных формул
- •Язык SQL
- •Отличие SQL от процедурных языков программирования
- •Формы и составные части SQL
- •Условия и терминология
- •Простейшие SELECT-запросы
- •Ограничения целостности в реляционной модели
- •Ограничения целостности уровня атрибута
- •Домены отношений
- •Отсутствующая информация или NULL-значения.
- •Ограничения целостности уровня кортежа
- •Ограничения целостности уровня отношения
- •Потенциальные, первичные, альтернативные ключи отношения
- •Потенциальные ключи и NULL-значения
- •Ограничения целостности уровня базы данных
- •Внешние ключи и NULL-значения
- •Правила ссылочной целостности
- •При обновлении кортежа в родительском отношении
- •При удалении кортежа в родительском отношении
- •При вставке кортежа в дочернее отношение
- •При обновлении кортежа в дочернем отношении
- •Средства обеспечения целостности данных в СУБД
- •Поддержка декларативных ограничений целостности в языке SQL
- •Проектирование базы данных
- •Функциональная зависимость
- •Нормализация отношений базы данных
- •Нормальные формы
- •Декомпозиция без потерь и функциональные зависимости
- •Первая и вторая нормальные формы.
- •Третья нормальная форма.
- •Многозначные зависимости и четвертая нормальная форма
- •Зависимости соединения и пятая нормальная форма
- •Итоговая схема процедуры нормализации
- •Структуры хранения данных и методы доступа
- •Хранение отношений и доступ к хранимым данным
- •Индексирование
- •Управление транзакциями и целостность баз данных
- •Транзакции и параллелизм
- •Проблемы, возникающие при параллельном выполнении транзакций
- •Проблема потери результатов обновления
- •Проблемы несовместимого анализа
- •Несовместимый анализ – неповторяемое считывание
- •Несовместимый анализ – фиктивные элементы (фантомы)
- •Собственно несовместимый анализ
- •Конфликты между транзакциями
- •Методы сериализации транзакций
- •Решение проблем параллелизма при помощи блокировок
- •Проблема потери результатов обновления
- •Проблема несовместимого анализа. Неповторяемое считывание
- •Фиктивные элементы (фантомы)
- •Собственно несовместимый анализ
- •Уровни изоляции. Объекты синхронизационных блокировок
- •Предикатные синхронизационные блокировки
- •Метод временных меток
- •Уровни изоляции.
- •Синтаксис операторов SQL, определяющих уровни изоляции
60
соединяемыми отношениями. В качестве примере, можно заметить, что время выполнения запроса, использующего соединение нескольких отношений, при одинаковом виде выходного отношения, тем не менее, может отличаться в десятки и сотни раз в случаях грамотного или, напротив, неквалифицированного формального подхода к составлению текста запроса.
Деление
Пусть два отношение R1 и R2 имеют заголовки, соответственно {X, Y} и {Y}, где X, Y атрибуты (возможно составные). Атрибут (группа атрибутов) Y – общие для обоих отношений. Отношение R1 имеет, кроме того, дополнительные атрибуты X, а отношение R2 не имеет никаких дополнительных атрибутов. Полагаем, что атрибуты с одинаковыми именами Y обоих отношений определены на одинаковых доменах.
Тогда операцией деления отношения R1 на отношение R2, обозначаемой R1 DIVIDE BY R2, где R1 – делимое, а R2 – делитель, называется отношение с заголовком {X} и телом, содержащим множество всех кортежей {<X:x>} таких, что существует набор кортежей {<X:x>, <Y:y>}, принадлежащий отношению R1, для всех кортежей {<Y:y>}, принадлежащих отношению R2.
Несколько менее строго это можно сформулировать так: результирующее отношение содержит такие значения атрибутов Х отношения R1, для которых соответствующие значения атрибута Y из R1 включают все значения атрибута Y из отношения R2.
Пример 1
Делимое |
|
|
Делитель |
Частное |
||||
|
|
|
1. |
|
|
|
|
|
X |
|
Y |
Y |
|
|
X |
|
|
x1 |
|
y1 |
|
y1 |
|
|
x1 |
|
x1 |
|
y2 |
|
|
|
|
x2 |
|
x1 |
|
y3 |
|
|
|
|
|
|
x1 |
|
y4 |
|
|
|
|
|
|
x1 |
|
y5 |
2. |
Y |
|
|
X |
|
x1 |
|
y6 |
|
y2 |
|
|
x1 |
|
x2 |
|
y1 |
|
y4 |
|
x4 |
|
|
x2 |
|
y2 |
|
|
|
|
|
|
x3 |
|
y2 |
|
|
|
|
|
|
x4 |
|
y2 |
3. |
Y |
|
|
X |
|
x4 |
|
y4 |
|
y1 |
|
|
x1 |
|
x4 |
|
y5 |
|
y2 |
|
|
|
|
|
|
|
|
y3 |
|
|
|
|
|
|
|
|
y4 |
|
|
|
|
|
|
|
|
y5 |
|
|
|
|
|
|
|
|
y6 |
|
|
|
61
Пример 2
Пусть даны два отношения: ОТНОШЕНИЕ_1 и ОТНОШЕНИЕ_2.
ОТНОШЕНИЕ_1 |
|
ОТНОШЕНИЕ_2 |
РЕЗУЛЬТАТ |
|||
СТУДЕНТ |
ДИСЦИПЛИНА |
|
ДИСЦИПЛИНА |
|
|
СТУДЕНТ |
Иванов |
Физика |
|
Математика |
|
Иванов |
|
Иванов |
Математика |
|
История |
|
Орлов |
|
Иванов |
Информатика |
|
|
|
|
|
Иванов |
История |
|
|
|
|
|
Иванов |
Химия |
|
|
|
|
|
Иванов |
Электроника |
|
|
|
|
|
Петрова |
Физика |
|
|
|
|
|
Петрова |
Математика |
|
|
|
|
|
Сидоров |
Математика |
|
|
|
|
|
Орлов |
Математика |
|
|
|
|
|
Орлов |
История |
|
|
|
|
|
Орлов |
Химия |
|
|
|
|
|
Требуется получить список студентов изучающих все дисциплины, приведённые во втором отношении. Эта операция может быть выполнена путем деления первого отношения на второе.
62
Примеры выполнения операций над отношениями с использованием реляционной алгебры.
Пусть имеются следующие отношения: СТУДЕНТЫ, ДИСЦИПЛИНЫ, УСПЕВАЕМОСТЬ, содержащие данные о студентах, учебных дисциплинах и оценках, полученных студентами по конкретным дисциплинам.
СТУДЕНТ
КОД_СТУД |
ИМЯ |
ГОРОД |
С2 |
Иванов |
Орел |
С5 |
Петрова |
Курск |
С4 |
Сидоров |
Москва |
С7 |
Кузнецов |
Брянск |
С8 |
Зайцева |
Липецк |
С3 |
Павлов |
Воронеж |
С10 |
Котов |
Орел |
С15 |
Лукин |
Воронеж |
С23 |
Белкин |
Воронеж |
ДИСЦИПЛИНЫ
КОД_ДИСЦИПЛ |
НАИМЕНОВАНИЕ |
Д2 |
Информатика |
Д6 |
Физика |
Д1 |
Математика |
Д5 |
История |
Д7 |
Английский |
Д4 |
Физкультура |
УСПЕВАЕМОСТЬ
КОД_СТУД |
КОД_ДИСЦИПЛ |
ОЦЕНКА |
С2 |
Д2 |
5 |
С4 |
Д2 |
4 |
С8 |
Д2 |
5 |
С7 |
Д6 |
3 |
С7 |
Д1 |
4 |
С3 |
Д4 |
5 |
Пример 1
Запрос: «Получить имена студентов, сдавших дисциплину Д2». В результате выполнения алгебраического выражения
((СТУДЕНТЫ JOIN УСПЕВАЕМОСТЬ) WHERE КОД_ДИСЦИПЛ = ‘Д2’)[ИМЯ]
получится искомое отношение, содержащее один атрибут ИМЯ (имя студента). Вычисление этого составного выражения может быть представлено в виде
последовательности следующих более простых действий.
1) T1:= СТУДЕНТЫ JOIN УСПЕВАЕМОСТЬ
Информация отношения СТУДЕНТЫ дополняется соответствующей информацией из отношения ОЦЕНКА. В результате получится отношение
T1
КОД_СТУД |
ИМЯ |
ГОРОД |
КОД_ДИСЦИПЛ |
ОЦЕНКА |
С2 |
Иванов |
Орел |
Д2 |
5 |
С7 |
Кузнецов |
Брянск |
Д6 |
3 |
С7 |
Кузнецов |
Брянск |
Д1 |
4 |
С8 |
Зайцева |
Липецк |
Д2 |
5 |
С3 |
Павлов |
Воронеж |
Д4 |
5 |
63
2) T2:= T1 WHERE КОД_ДИСЦИПЛ = ‘Д2’
T2
КОД_СТУД |
ИМЯ |
ГОРОД |
КОД _ДИСЦИПЛ |
ОЦЕНКА |
С2 |
Иванов |
Орел |
Д2 |
5 |
С8 |
Зайцева |
Липецк |
Д2 |
5 |
3) T3:= T2[ИМЯ]
T3
ИМЯ
Иванов
Зайцева
Здесь символ “:=” означает оператор присваивания, обозначения Ti используются в качестве имен, временных отношений, являющихся промежуточными результатами вычислений.
Пример 2
Запрос: «Получить имена и города студентов, сдавших информатику».
(((ДИСЦИПЛИНЫ WHERE НАИМЕНОВАНИЕ=‘Информатика’) JOIN УСПЕВАЕМОСТЬ)[КОД_СТУД] JOIN Студенты)[ИМЯ, ГОРОД]
Другой вариант этого запроса
(((ДИСЦИПЛИНЫ WHERE НАИМЕНОВАНИЕ=‘Информатика’)[КОД_СТУД] JOIN УСПЕВАЕМОСТЬ) JOIN СТУДЕНТЫ) [ИМЯ, ГОРОД]
В результате обоих вариантов будут получены одинаковые отношения, содержащие два атрибута ИМЯ и ГОРОД.
ИМЯ ГОРОД
Иванов Орел Сидоров Москва Зайцева Липецк
Этот пример, в частности, иллюстрирует тот факт, что один и тот же результат может быть получен различными способами, с помощью различных алгебраических выражений.
Пример 3
Запрос: «Получить имена студентов, которые не сдавали дисциплину Д6».
((СТУДЕНТЫ[КОД_СТУД] MINUS (УСПЕВАЕМОСТЬ
WHERE КОД_ДИСЦИПЛ = ‘Д6’) [КОД_СТУД]) JOIN Студенты)[ИМЯ]
Это выражение эквивалентно последовательному выполнению действий
64
T1:= СТУДЕНТЫ[КОД_СТУД];
T2:= УСПЕВАЕМОСТЬ WHERE КОД_ДИСЦИПЛ = ‘Д6’; T3:= T2[КОД_СТУД];
T4:= T1 MINUS T2;
T5:= T4 JOIN Студенты;
T6:= T5[ИМЯ]
Отношение T6 содержит искомый результат.
Таким образом, важным назначением реляционной алгебры, проиллюстрированным приведенными примерами, является обеспечение возможности записи с помощью базовых реляционных операций сложных выражений, задающих последовательность преобразования исходных отношений для получения необходимого результата.
Как и в обычной алгебре, в реляционной алгебре возможно тождественное преобразование выражений с использованием соответствующих правил преобразования.
Например, выражение из примера 1
((СТУДЕНТЫ JOIN УСПЕВАЕМОСТЬ) WHERE КОД_ДИСЦИПЛ = ‘Д2’) [ИМЯ]
(получить имена студентов, сдавших дисциплину Д2) может быть преобразовано к другому эквивалентному ему виду
((УСПЕВАЕМОСТЬ WHERE КОД_ДИСЦИПЛ = ‘Д2’) JOIN СТУДЕНТЫ)[ИМЯ].
Можно обратить внимание, что второе выражение возможно более рационально с точки зрения времени, затрачиваемого на выполнения запроса. Действительно, в нем вначале из отношения УСПЕВАЕМОСТЬ отбираются кортежи, удовлетворяющие заданному условию, благодаря чему уменьшается число кортежей, участвующих в операции соединения с отношением
СТУДЕНТЫ.
Этот пример говорит о том, что реляционная алгебра предоставляет возможность использования тождественных преобразований алгебраических выражений для оптимизации выполнения запросов, например с точки зрения длительности их выполнения. «Хорошая» СУБД должна иметь в своем составе средства, осуществляющие такую оптимизацию и обеспечивающие в идеале независимость времени выполнения запросов от формы его представления пользователем.