- •Установочный модуль
- •Введение
- •Модуль 1
- •Реляционная алгебра
- •Отсутствующие данные
- •Пустые значения
- •Неопределенные значения
- •Интерпретации
- •Правила вычисления выражений
- •Следствия
- •Проверка условий
- •Реляционные объекты данных
- •Формальные определения
- •Домены и атрибуты
- •Схема отношения
- •Именованное значение атрибута
- •Кортеж
- •Отношение
- •Схема базы данных
- •База данных
- •Операции реляционной алгебры
- •Унарные операции
- •Бинарные операции
- •Варианты операции соединения
- •Производные операции
- •Пример построения выражения реляционной алгебры
- •Понятие базовых и виртуальных отношений
- •Понятие полноты реляционной алгебры
- •Формирование запросов на языке SQL
- •Металингвистические символы
- •Реализация операций реляционной алгебры
- •Пример использования подзапросов
- •Группирующие запросы
- •Упорядочение результатов
- •Вопросы для самоконтроля
- •Упражнения
- •Построение выражений реляционной алгебры
- •Модуль 2
- •Базовые и виртуальные отношения
- •Типы данных
- •Базовые типы данных
- •Типы данных, определяемые пользователем
- •Первичные и кандидатные ключи
- •Создание базовых отношений
- •Индексы
- •Модификация базовых отношений
- •Вставка строк
- •Обновление строк
- •Удаление строк
- •Целостность
- •Декларативная поддержка
- •Пример декларативной поддержки целостности
- •Транзакции и блокировки
- •Триггеры
- •Виртуальные отношения
- •Вопросы для самоконтроля
- •Упражнения
- •Декларативная поддержка целостности
- •Модуль 3
- •Нормальные формы
- •Функциональные зависимости (ФЗ)
- •Правила вывода Армстронга
- •Производные правила вывода
- •Независимость правил Армстронга
- •Полнота системы правил Армстронга
- •Нормальные формы
- •Первая нормальная форма (1NF)
- •Вторая нормальная форма (2NF)
- •Третья нормальная форма (3NF)
- •Нормальная форма Бойса-Кодда (Boyce, Codd; NFBC)
- •Пример построения нормализованных схем отношений
- •Вопросы для самоконтроля
- •Модуль 4
- •Проектирование схем баз данных
- •Уровни логической модели
- •Миграция ключей и виды связей
- •Классификация кластеров
- •Иерархическая рекурсия
- •Абстрактная схема
- •Обобщения
- •Пример реализации иерархической рекурсии
- •Сетевая рекурсия
- •Абстрактная схема
- •Сетевая реализация иерархической рекурсии
- •Обобщения
- •Пример реализации сетевой рекурсии
- •Ассоциация
- •Детализация связей многие-ко-многим
- •Обобщения
- •Пример реализации ассоциации
- •Обобщение
- •Абстрактная схема
- •Пример реализации обобщения
- •Композиция
- •Абстрактная схема
- •Пример реализации композиции
- •Агрегация
- •Абстрактная схема
- •Пример реализации агрегации
- •Унификация атрибутов
- •Вопросы для самоконтроля
- •Упражнения
- •Иерархическая рекурсия
- •Сетевая рекурсия
- •Ассоциация
- •Обобщение
- •Композиция
- •Агрегация
- •Дополнительные главы
- •Технологии баз данных
- •Информационные системы
- •Жизненный цикл ИС
- •СУБД и БД
- •Жизненный цикл БД и средства проектирования
- •Модели данных
- •Иерархическая модель данных
- •Сетевая модель данных
- •Реляционная модель данных
- •Постреляционная модель данных
- •Объектно-ориентированные модели данных
- •XML как модель данных
- •Многомерная модель данных (OLAP)
- •Основные функции СУБД
- •Управление данными во внешней памяти
- •Управление буферами оперативной памяти
- •Управление транзакциями
- •Журнализация и восстановление БД после сбоев
- •Поддержка языков баз данных
- •Типовая организация СУБД
- •Модели взаимодействия с БД
- •Модель с централизованной архитектурой
- •Модель с автономными персональными компьютерами
- •Архитектура «файл-сервер»
- •Архитектура «клиент-сервер»
- •Архитектура «клиент-сервер» трехзвенная
- •Распределенные базы данных
- •Технология тиражирования данных
- •Понятие «фрактал»
- •Геометрические фракталы
- •Алгебраические фракталы
- •Стохастические фракталы
- •Системы итерируемых функций
- •Вопросы для самоконтроля
- •Литература
- •Список иллюстраций
- •Список таблиц
3.5.3. Удаление строк
Оператор delete удаляет несколько строк таблицы:
delete from имя_таблицы [where условие]
Необязательная фраза where дает возможность отбирать удаляемые строки. Если эта фраза опущена, то будут удалены все строки в указанной таблице.
Все строки таблицы могут быть удалены одновременно с помощью оператора
truncate table имя_таблицы
Это оператор отличается от оператора delete без фразы where тем, что не записывается в журнал транзакций и, как следствие, выполняется существенно быстрее. Кроме того, оператор truncate table сбрасывает значение счетчика для идентификационного столбца.
3.6. Целостность
Ограничение целостности (integrity – нетронутость, неприкосновенность, сохранность, целостность) реляционного объекта данных (по состоянию) – это инвариант данных, что означает правильность данных в любой момент времени. Но эта цель может быть достигнута лишь в определенных пределах: СУБД не может контролировать правильность каждого отдельного значения, вводимого в
базу данных (хотя каждое значение можно проверить на правдоподобность). Например, нельзя обнаружить, что вводимое значение 5 (представляющее номер дня недели) в действительности должно
быть равно 3. С другой стороны, значение 9 явно будет ошибочным и СУБД должна его отвергнуть. Однако для этого ей следует сообщить, что номера дней недели должны принадлежать набору (1,2,3,4,5,6,7).
Поддержание целостности базы данных может рассматриваться как защита данных от ошибочных изменений.
Целостность следует отличать от безопасности, которая подразумевает защиту данных от несанкционированного (незаконного) доступа к ним с целью раскрытия, изменения или разрушения данных.
Современные СУБД имеют ряд средств для обеспечения поддержания целостности (как, впрочем, и средств обеспечения поддержания безопасности).
3.6.1. Декларативная поддержка
В общем случае классификация ограничений целостности по уровням иерархии реляционных объектов данных (атрибут – кортеж – отношение – база данных) означает зависимость ограничений
1)на уровне атрибута – от значения атрибута,
2)на уровне кортежа – от значения кортежа, то есть от значений нескольких атрибутов,
3)на уровне отношения – от отношения, то есть от нескольких кортежей,
4)на уровне базы данных – от нескольких отношений.
Декларативная (то есть путем объявлений, а не процедурная с помощью написания программного кода) поддержка ограничений целостности реализуется в контексте оператора создания базового отношения.
Ограничение уровня атрибута включает
1)ограничение типа значений атрибута, например, integer для атрибута Курс;
2)ограничение значений атрибута, записываемое как условие, зависящее от имени атрибута, например, check(1 <= Курс and Курс <= 5);
3)ограничение null-значений, определяемое флажком допустимости (null) или недопустимости (not null) null-значений.
Первые два ограничения определяют ограничение домена атрибута.
Ограничение уровня кортежа сводится к ограничению кортежа и записывается как условие, зависящее от имен нескольких базовых атрибутов схемы отношения, например, check(0 < minВесКг and minВесКг < maxВесКг).
Ограничение уровня отношения включает ограничения уникальности значений первичного (primary key) и кандидатных (candidate key) ключей.
Ограничение уровня базы данных включает ограничения ссылочной целостности внешних ключей (foreign key). Внешний ключ объявляемого базового отношения ссылается на первичный или кандидатный ключ того же или другого базового отношения.
Отношение, на которое ссылается внешний ключ, называется ссылочным, или родительским. Отношение, содержащее внешний ключ, называется дочерним.
Ограничение ссылочной целостности заключается в том, что каждому значению внешнего ключа дочернего отношения должно соответствовать значение ключа родительского отношения (если только значение внешнего ключа не содержит null-значений в каких-либо атрибутах). Кортежи дочернего отношения, нарушающие это условие, называются висящими. Для исключения возможности их появления при объявлении внешнего ключа задается одно из следующих правил поддержания ссылочной целостности, применяемых при обновлении значения ключа в кортеже родительского отношения или удалении кортежа из родительского отношения (вставка нового кортежа в родительское отношение не может нарушить ссылочную целостность).
1. restrict – правило ограничения. Обновление ключа в родительском отношении или удаление кортежа из родительского отношения не выполняется, если на этот кортеж родительского отношения ссылается хотя бы один кортеж дочернего отношения. В примере на рис. 3.2 кортежи родительского отношения лишь со значением первичного ключа 1 и 4 допускают обновление ключа PK-РодОтн или удаление кортежа.
Рис. 3.2.: Декларативная поддержка ссылочной целостности
2. cascade – правило каскадной модификации. Обновление ключа в родительском отношении или удаление кортежа из родительского отношения вызывает автоматическое обновление или удаление соответствующих кортежей дочернего отношения. Если в выше рассмотренном примере (рис. 3.2) заменить правило restrict на cascade, то при обновлении PK-РодОтн с 2 на 20 зна-
чение FK-ДочОтн в двух кортежах также обновится с 2 на 20, а при удалении кортежа со значением PK-РодОтн, равным 2, из дочернего отношения автоматически удалятся кортежи со значением FK-ДочОтн, равным 2.
3. set null – правило присвоения null-значений. Обновление ключа в родительском отношении или удаление кортежа из родительского отношения вызывает автоматическое присвоение null- значений тем атрибутам внешнего ключа, которые null-значения допускают. Правило применимо, если такие атрибуты имеются.
Правила поддержания ссылочной целостности во фразах on update и on delete могут быть различными.
Вставка кортежа в дочернее отношение или обновление значения ключа в дочернем отношении не будут выполнены, если это будет приводить к нарушению ссылочной целостности. Удаление кортежей из дочернего отношения не может привести к появлению висящих кортежей.
Примечание. Заметим, что в реляционной модели с помощью механизма внешних ключей реализуется принцип «дочерние сущности знают о родительских, но не наоборот». В объектно-ориентированных моделях часто применяется обратный принцип, при котором родительские классы объектов содержат в себе данные о дочерних объектах
Дочернее отношение в одной связи может выступать в качестве родительского в другой связи со своими правилами поддержания ссылочной целостности.
Процедурная поддержка нестандартных ограничений целостности реализуется с помощью триггеров.