Оглавление



Оглавление

ВВЕДЕНИЕ

ГЛАВА 1. ЭЛЕМЕНТЫ ТЕОРИИ МНОЖЕСТВ Множества
Операции над множествами
Декартово произведение множеств
Отношение
Примеры отношений
Бинарные отношения (отношения степени 2)
Отношение эквивалентности
Отношения порядка
Функциональное отношение
Еще пример бинарного отношения
n-арные отношения (отношения степени n)
Транзитивное замыкание отношений
Выводы

ГЛАВА 2. БАЗОВЫЕ ПОНЯТИЯ РЕЛЯЦИОННОЙ МОДЕЛИ ДАННЫХ Общая характеристика реляционной модели данных
Типы данных
Простые типы данных
Структурированные типы данных
Ссылочные типы данных
Типы данных, используемые в реляционной модели
Домены


Отношения, атрибуты, кортежи отношения
Определения и примеры
Свойства отношений
Первая нормальная форма
Выводы

ГЛАВА 3. ЦЕЛОСТНОСТЬ РЕЛЯЦИОННЫХ ДАННЫХ Null-значения
Трехзначная логика (3VL)
Потенциальные ключи
Целостность сущностей
Внешние ключи
Целостность внешних ключей
Замечания к правилам целостности сущностей и внешних ключей
Операции, могущие нарушить ссылочную целостность
Для родительского отношения
Для дочернего отношения
Стратегии поддержания ссылочной целостности
Применение стратегий поддержания ссылочной целостности
При обновлении кортежа в родительском отношении
При удалении кортежа в родительском отношении
При вставке кортежа в дочернее отношение
При обновлении кортежа в дочернем отношении
Выводы

ГЛАВА 4. РЕЛЯЦИОННАЯ АЛГЕБРА. Обзор реляционной алгебры
Замкнутость реляционной алгебры
Отношения, совместимые по типу
Оператор переименования атрибутов
Теоретико-множественные операторы
Объединение
Пересечение
Вычитание
Декартово произведение
Специальные реляционные операторы
Выборка (ограничение, селекция)
Проекция
Соединение
Общая операция соединения
Тэта-соединение
Экви-соединение
Естественное соединение
Деление
Примеры использования реляционных операторов
Зависимые реляционные операторы
Оператор соединения
Оператор пересечения
Оператор деления
Примитивные реляционные операторы
Оператор декартового произведения
Оператор проекции
Оператор выборки
Операторы объединения и вычитания
Запросы, невыразимые средствами реляционной алгебры
Плохая нормализация отношений
Невыразимость транзитивного замыкания реляционными операторами
Кросс-таблицы
Выводы

ГЛАВА 5. ЭЛЕМЕНТЫ ЯЗЫКА SQL. Операторы SQL
Операторы DDL (Data Definition Language) - операторы определения объектов базы данных
Операторы DML (Data Manipulation Language) - операторы манипулирования данными
Операторы защиты и управления данными
Примеры использования операторов манипулирования данными
INSERT - вставка строк в таблицу
UPDATE - обновление строк в таблице
DELETE - удаление строк в таблице
Примеры использования оператора SELECT
Отбор данных из одной таблицы
Отбор данных из нескольких таблиц
Использование имен корреляции (алиасов, псевдонимов)
Использование агрегатных функций в запросах
Использование агрегатных функций с группировками
Использование подзапросов
Использование объединения, пересечения и разности
Синтаксис оператора выборки данных (SELECT)
BNF-нотация
Синтаксис оператора выборки
Синтаксис соединенных таблиц
Синтаксис условных выражений раздела WHERE
Порядок выполнения оператора SELECT
Стадия 1. Выполнение одиночного оператора SELECT
Стадия 2. Выполнение операций UNION, EXCEPT, INTERSECT
Стадия 3. Упорядочение результата
Как на самом деле выполняется оператор SELECT
Реализация реляционной алгебры средствами оператора
SELECT (Реляционная полнота SQL)
Оператор декартового произведения
Оператор проекции
Оператор выборки
Оператор объединения
Оператор вычитания
Оператор соединения
Оператор пересечения
Оператор деления
Выводы

ГЛАВА 6. НОРМАЛЬНЫЕ ФОРМЫ ОТНОШЕНИЙ Этапы разработки базы данных
Критерии оценки качества логической модели данных
Адекватность базы данных предметной области
Легкость разработки и сопровождения базы данных
Скорость операций обновления данных (вставка, обновление, удаление)
Скорость операций выборки данных
Основной пример
1НФ (Первая Нормальная Форма)
Аномалии обновления
Аномалии вставки (INSERT)
Аномалии обновления (UPDATE)
Аномалии удаления (DELETE)
Функциональные зависимости
Определение функциональной зависимости
Функциональные зависимости отношений и математическое понятие функциональной зависимости
2НФ (Вторая Нормальная Форма)
Анализ декомпозированных отношений
Оставшиеся аномалии вставки (INSERT)
Оставшиеся аномалии обновления (UPDATE)
Оставшиеся аномалии удаления (DELETE)
3НФ (Третья Нормальная Форма)
Алгоритм нормализации (приведение к 3НФ)
Анализ критериев для нормализованных и ненормализованных моделей данных
Сравнение нормализованных и ненормализованных моделей
OLTP и OLAP-системы
Корректность процедуры нормализации - декомпозиция без потерь. Теорема Хеза
Выводы

ГЛАВА 7. НОРМАЛЬНЫЕ ФОРМЫ БОЛЕЕ ВЫСОКИХ ПОРЯДКОВ НФБК (Нормальная Форма Бойса-Кодда)
4НФ (Четвертая Нормальная Форма)
5НФ (Пятая Нормальная Форма)
Продолжение алгоритма нормализации (приведение к 5НФ)
Выводы

ГЛАВА 8. ЭЛЕМЕНТЫ МОДЕЛИ "СУЩНОСТЬ-СВЯЗЬ" Основные понятия ER-диаграмм
Пример разработки простой ER-модели
Концептуальные и физические ER-модели
Выводы

ГЛАВА 9. ТРАНЗАКЦИИ И ЦЕЛОСТНОСТЬ БАЗ ДАННЫХ Пример нарушения целостности базы
Понятие транзакции
Ограничения целостности
Классификация ограничений целостности
Классификация ограничений целостности по способам реализации
Классификация ограничений целостности по времени проверки
Классификация ограничений целостности по области действия
Ограничения домена
Ограничения атрибута
Ограничения кортежа
Ограничения отношения
Ограничения базы данных
Реализация декларативных ограничений целостности средствами SQL
Общие принципы реализации ограничений средствами SQL
Синтаксис ограничений стандарта SQL
Синтаксис операторов SQL, использующих ограничения
Выводы

ГЛАВА 10. ТРАНЗАКЦИИ И ПАРАЛЛЕЛИЗМ Работа транзакций в смеси
Проблемы параллельной работы транзакций
Проблема потери результатов обновления
Проблема незафиксированной зависимости (чтение "грязных" данных, неаккуратное считывание)
Проблема несовместимого анализа
Неповторяемое считывание
Фиктивные элементы (фантомы)
Собственно несовместимый анализ
Конфликты между транзакциями
Блокировки
Решение проблем параллелизма при помощи блокировок
Проблема потери результатов обновления
Проблема незафиксированной зависимости (чтение "грязных" данных, неаккуратное считывание)
Проблема несовместимого анализа
Неповторяемое считывание
Фиктивные элементы (фантомы)
Собственно несовместимый анализ
Разрешение тупиковых ситуаций
Преднамеренные блокировки
Предикатные блокировки
Метод временных меток
Механизм выделения версий данных
Теорема Есварана о сериализуемости
Реализация изолированности транзакций средствами SQL
Уровни изоляции
Синтаксис операторов SQL, определяющих уровни изоляции
Выводы

ГЛАВА 11. ТРАНЗАКЦИИ И ВОССТАНОВЛЕНИЕ ДАННЫХ Виды восстановления данных
Индивидуальный откат транзакции
Восстановление после мягкого сбоя
Восстановление после жесткого сбоя
Восстановление данных и стандарт SQL
Выводы

СПИСОК ЛИТЕРАТУРЫ

 



Ограничения целостности



Ограничения целостности

Свойство (С) - согласованность транзакций определяется наличием понятия согласованности базы данных.

Oltp и olap-системы



OLTP и OLAP-системы

Можно выделить некоторые классы систем, для которых больше подходят сильно или слабо нормализованные модели данных.

Сильно нормализованные модели данных хорошо подходят для так называемых OLTP-приложений (On-Line Transaction Processing (OLTP)- оперативная обработка транзакций). Типичными примерами OLTP-приложений являются системы складского учета, системы заказов билетов, банковские системы, выполняющие операции по переводу денег, и т.п. Основная функция подобных систем заключается в выполнении большого количества коротких транзакций. Сами транзакции выглядят относительно просто, например, "снять сумму денег со счета А, добавить эту сумму на счет В". Проблема заключается в том, что, во-первых, транзакций очень много, во-вторых, выполняются они одновременно (к системе может быть подключено несколько тысяч одновременно работающих пользователей), в-третьих, при возникновении ошибки, транзакция должна целиком откатиться и вернуть систему к состоянию, которое было до начала транзакции (не должно быть ситуации, когда деньги сняты со счета А, но не поступили на счет В). Практически все запросы к базе данных в OLTP-приложениях состоят из команд вставки, обновления, удаления. Запросы на выборку в основном предназначены для предоставления пользователям возможности выбора из различных справочников. Большая часть запросов, таким образом, известна заранее еще на этапе проектирования системы. Таким образом, критическим для OLTP-приложений является скорость и надежность выполнения коротких операций обновления данных. Чем выше уровень нормализации данных в OLTP-приложении, тем оно, как правило, быстрее и надежнее. Отступления от этого правила могут происходить тогда, когда уже на этапе разработки известны некоторые часто возникающие запросы, требующие соединения отношений и от скорости выполнения которых существенно зависит работа приложений. В этом случае можно пожертвовать нормализацией для ускорения выполнения подобных запросов.

Другим типом приложений являются так называемые OLAP-приложения (On-Line Analitical Processing (OLAP) - оперативная аналитическая обработка данных). Это обобщенный термин, характеризующий принципы построения систем поддержки принятия решений (Decision Support System - DSS), хранилищ данных (Data Warehouse), систем интеллектуального анализа данных (Data Mining). Такие системы предназначены для нахождения зависимостей между данными (например, можно попытаться определить, как связан объем продаж товаров с характеристиками потенциальных покупателей), для проведения анализа "что если…". OLAP-приложения оперируют с большими массивами данных, уже накопленными в OLTP-приложениях, взятыми их электронных таблиц или из других источников данных. Такие системы характеризуются следующими признаками: Добавление в систему новых данных происходит относительно редко крупными блоками (например, раз в квартал загружаются данные по итогам квартальных продаж из OLTP-приложения). Данные, добавленные в систему, обычно никогда не удаляются. Перед загрузкой данные проходят различные процедуры "очистки", связанные с тем, что в одну систему могут поступать данные из многих источников, имеющих различные форматы представления для одних и тех же понятий, данные могут быть некорректны, ошибочны. Запросы к системе являются нерегламентированными и, как правило, достаточно сложными. Очень часто новый запрос формулируется аналитиком для уточнения результата, полученного в результате предыдущего запроса. Скорость выполнения запросов важна, но не критична.

Данные OLAP-приложений обычно представлены в виде одного или нескольких гиперкубов, измерения которого представляют собой справочные данные, а в ячейках самого гиперкуба хранятся собственно данные. Например, можно построить гиперкуб, измерениями которого являются: время (в кварталах, годах), тип товара и отделения компании, а в ячейках хранятся объемы продаж. Такой гиперкуб будет содержать данных о продажах различных типов товаров по кварталам и подразделениям. Основываясь на этих данных, можно отвечать на вопросы вроде "у какого подразделения самые лучшие объемы продаж в текущем году?", или "каковы тенденции продаж отделений Юго-Западного региона в текущем году по сравнению с предыдущим годом?"

Физически гиперкуб может быть построен на основе специальной многомерной модели данных (MOLAP - Multidimensional OLAP) или построен средствами реляционной модели данных (ROLAP - Relational OLAP).

Возвращаясь к проблеме нормализации данных, можно сказать, что в системах OLAP, использующих реляционную модель данных (ROLAP), данные целесообразно хранить в виде слабо нормализованных отношений, содержащих заранее вычисленные основные итоговые данные. Большая избыточность и связанные с ней проблемы тут не страшны, т.к. обновление происходит только в момент загрузки новой порции данных. При этом происходит как добавление новых данных, так и пересчет итогов.



Операции, могущие нарушить ссылочную целостность



Операции, могущие нарушить ссылочную целостность

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

Операции над множествами



Операции над множествами

Основными операциями над множествами являются объединение, пересечение и разность.

Оператор декартового произведения



Оператор декартового произведения

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

Оператор декартового произведения

Реляционная алгебра:

Оператор SQL: SELECT A.Поле1, A.Поле2, …, B.Поле1, B.Поле2, … FROM A, B;

или SELECT A.Поле1, A.Поле2, …, B.Поле1, B.Поле2, … FROM A CROSS JOIN B;



Оператор деления



Оператор деления

Оператор деления выражается через операторы вычитания, декартового произведения и проекции следующим образом:

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

Оператор деления

Реляционная алгебра:

Оператор SQL: SELECT DISTINCT A.X FROM A WHERE NOT EXIST (SELECT * FROM B WHERE NOT EXIST (SELECT * FROM A A1 WHERE A1.X = A.X AND A1.Y = B.Y));

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

Пусть отношение A содержит данные о поставках деталей, отношение B содержит список всех деталей, которые могут поставляться. Атрибут X является номером поставщика, атрибут Y является номером детали.

Разделить отношение A на отношение B означает в данном примере "отобрать номера поставщиков, которые поставляют все детали".

Преобразуем текст выражения:

"Отобрать номера поставщиков, которые поставляют все детали" эквивалентно

"Отобрать те номера поставщиков из таблицы A, для которых не существует непоставляемых деталей в таблице B" эквивалентно

"Отобрать те номера поставщиков из таблицы A, для которых не существует тех номеров деталей из таблицы B, которые не поставляются этим поставщиком" эквивалентно

"Отобрать те номера поставщиков из таблицы A, для которых не существует тех номеров деталей из таблицы B, для которых не существует записей о поставках в таблице A для этого поставщика и этой детали".

Последнее выражение дословно переводится на язык SQL. При переводе выражения на язык SQL нужно учесть, что во внутреннем подзапросе таблица A должна быть переименована, для того чтобы отличать ее от экземпляра этой же таблицы, используемой во внешнем запросе.



Оператор объединения



Оператор объединения

Реляционная алгебра:

Оператор SQL: SELECT * FROM A UNION SELECT * FROM B;

Оператор переименования атрибутов



Оператор переименования атрибутов

Оператор переименования атрибутов имеет следующий синтаксис:

где

В результате применения оператора переименования атрибутов получаем новое отношение, с измененными именами атрибутов.



Оператор пересечения



Оператор пересечения

Оператор пересечения выражается через вычитание следующим образом:



Оператор пересечения

Реляционная алгебра:

Оператор SQL: SELECT * FROM A INTERSECT SELECT * FROM B;


Оператор проекции



Оператор проекции

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

Оператор проекции

Реляционная алгебра:

Оператор SQL: SELECT DISTINCT X, Y, …, Z FROM A;



Оператор соединения



Оператор соединения

Оператор соединения определяется через операторы декартового произведения и выборки. Для оператора естественного соединения добавляется оператор проекции.

Оператор соединения

Реляционная алгебра:

Оператор SQL: SELECT A.Поле1, A.Поле2, …, B.Поле1, B.Поле2, … FROM A, B WHERE c;

или SELECT A.Поле1, A.Поле2, …, B.Поле1, B.Поле2, … FROM A CROSS JOIN B WHERE c;



Оператор выборки



Оператор выборки

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

Оператор выборки

Реляционная алгебра:

Оператор SQL: SELECT * FROM A WHERE c;



Оператор вычитания



Оператор вычитания

Реляционная алгебра:

Реляционный оператор переименования RENAME выражается при помощи ключевого слова AS в списке отбираемых полей оператора SELECT. Таким образом, язык SQL является реляционно полным.

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

Операторы ddl (data definition language) - операторы определения объектов базы данных



Операторы DDL (Data Definition Language) - операторы определения объектов базы данных

CREATE SCHEMA - создать схему базы данных DROP SHEMA - удалить схему базы данных CREATE TABLE - создать таблицу ALTER TABLE - изменить таблицу DROP TABLE - удалить таблицу CREATE DOMAIN - создать домен ALTER DOMAIN - изменить домен DROP DOMAIN - удалить домен CREATE COLLATION - создать последовательность DROP COLLATION - удалить последовательность CREATE VIEW - создать представление DROP VIEW - удалить представление

Операторы dml (data manipulation language) - операторы манипулирования данными



Операторы DML (Data Manipulation Language) - операторы манипулирования данными

SELECT - отобрать строки из таблиц INSERT - добавить строки в таблицу UPDATE - изменить строки в таблице DELETE - удалить строки в таблице COMMIT - зафиксировать внесенные изменения ROLLBACK - откатить внесенные изменения

Операторы объединения и вычитания



Операторы объединения и вычитания

Доказательство примитивности операторов объединения и вычитания более сложны и мы их здесь не приводим.

Операторы sql



Операторы SQL

Основу языка SQL составляют операторы, условно разбитые не несколько групп по выполняемым функциям.

Можно выделить следующие группы операторов (перечислены не все операторы SQL):

Операторы защиты и управления данными



Операторы защиты и управления данными

CREATE ASSERTION - создать ограничение DROP ASSERTION - удалить ограничение GRANT - предоставить привилегии пользователю или приложению на манипулирование объектами REVOKE - отменить привилегии пользователя или приложения

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

Наиболее важными для пользователя являются операторы манипулирования данными (DML).

двух множеств называется новое



Определение 1

. Объединением двух множеств называется новое множество



Определение 1.

Атрибут отношения есть пара вида <Имя_атрибута : Имя_домена>.

Имена атрибутов должны быть уникальны в пределах отношения. Часто имена атрибутов отношения совпадают с именами соответствующих доменов.



Определение 1

. Пусть дано отношение Определение 1 отношения потенциальным ключом, если Свойством уникальности - в отношении не может быть двух различных кортежей, с одинаковым значением Свойством неизбыточности - никакое подмножество в Любое отношение имеет по крайней мере один потенциальный ключ. Действительно, если никакой атрибут или группа атрибутов не являются потенциальным ключом, то, в силу уникальности кортежей, все атрибуты вместе образуют потенциальный ключ. Потенциальный ключ, состоящий из одного атрибута, называется простым. Потенциальный ключ, состоящий из нескольких атрибутов, называется составным. Отношение может иметь несколько потенциальных ключей. Традиционно, один из потенциальных ключей объявляется первичным, а остальные - альтернативными. Различия между первичным и альтернативными ключами могут быть важны в конкретной реализации реляционной СУБД, но с точки зрения реляционной модели данных, нет оснований выделять таким образом один из потенциальных ключей. Замечание. Понятие потенциального ключа является семантическим понятием и отражает некоторый смысл (трактовку) понятий из конкретной предметной области. Для того чтобы проиллюстрировать этот факт рассмотрим следующее отношение "Сотрудники":



Определение 1

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



Определение 1

. Пусть Определение 1 функционально зависимо от множества атрибутов Определение 1 функционально определяет Определение 1 для любых кортежей Определение 1 следует что Определение 1, значения атрибутов Определение 1). Символически функциональная зависимость записывается Множество атрибутов детерминантом функциональной зависимости, а множество атрибутов зависимой частью. Замечание. Если атрибуты Определение 1, то любой атрибут отношения Определение 1.



Определение 1

. Отношение нормальной форме Бойса-Кодда (НФБК) тогда и только тогда, когда детерминанты всех функциональных зависимостей являются потенциальными ключами. Замечание. Если отношение находится в НФБК, то оно автоматически находится и в 3НФ. Действительно, это сразу следует из определения 3НФ. Отношение "Поставки" не находится в НФБК, т.к. имеются зависимости (PNUM PNAME и PNAME PNUM), детерминанты которых не являются потенциальными ключами. Для того чтобы устранить зависимость от детерминантов, не являющихся потенциальными ключами, необходимо провести декомпозицию, вынося эти детерминанты и зависимые от них части в отдельное отношение. Отношения "Поставщики" и "Поставки-2", полученные в результате декомпозиции находятся в НФБК. Замечание. Приведенная декомпозиция отношения "Поставки" на отношения "Поставщики" и "Поставки-2" не является единственно возможной. Альтернативной декомпозицией является декомпозиция на следующие отношения:



Определение 1

. Сущность - это класс однотипных объектов, информация о которых должна быть учтена в модели. Каждая сущность должна иметь наименование, выраженное существительным в единственном числе.



Определение 1

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

двух множеств называется новое



Определение 2

. Пересечением двух множеств называется новое множество



Определение 2

. Отношение Определение 2 (не обязательно различных), содержит две части: заголовок и тело. Заголовок отношения содержит фиксированное количество атрибутов отношения:

Тело отношения содержит множество кортежей отношения. Каждый кортеж отношения представляет собой множество пар вида <Имя_атрибута : Значение_атрибута>:

таких что значение Определение 2 принадлежит домену Отношение обычно записывается в виде:

или короче

или просто

Число атрибутов в отношении называют степенью (или -арностью) отношения. Мощность множества кортежей отношения называют мощностью отношения. Возвращаясь к математическому понятию отношения, введенному в предыдущей главе, можно сделать следующие выводы: Вывод 1. Заголовок отношения описывает декартово произведение доменов, на котором задано отношение. Заголовок статичен, он не меняется во время работы с базой данных. Если в отношении изменены, добавлены или удалены атрибуты, то в результате получим уже другое отношение (пусть даже с прежним именем). Вывод 2. Тело отношения представляет собой набор кортежей, т.е. подмножество декартового произведения доменов. Таким образом, тело отношения собственно и является отношением в математическом смысле слова. Тело отношения может изменяться во время работы с базой данных - кортежи могут изменяться, добавляться и удаляться.



Определение 2

. Пусть дано отношение Определение 2 отношения внешним ключом, если: Существует отношение Определение 2 и Определение 2. Каждое значение Определение 2 всегда совпадает со значением Определение 2, либо является null-значением. Отношение родительским отношением, отношение дочерним отношением. Замечание. Внешний ключ, также как и потенциальный, может быть простым и составным. Замечание. Внешний ключ должен быть определен на тех же доменах, что и соответствующий первичный ключ родительского отношения. Замечание. Внешний ключ, как правило, не обладает свойством уникальности. Так и должно быть, т.к. в дочернем отношении может быть несколько кортежей, ссылающихся на один и тот же кортеж родительского отношения. Это, собственно, и дает тип отношения "один-ко-многим". Замечание. Если внешний ключ все-таки обладает свойством уникальности, то связь между отношениями имеет тип "один-к-одному". Чаще всего такие отношения объединяются в одно отношение, хотя это и не обязательно. Замечание. Хотя каждое значение внешнего ключа обязано совпадать со значениями потенциального ключа в некотором кортеже родительского отношения, то обратное, вообще говоря, неверно. Например, могут существовать поставщики, не поставляющие никаких деталей. Замечание. Для внешнего ключа не требуется, чтобы он был компонентом некоторого потенциального ключа (как получилось в примере с поставщиками и деталями). Замечание. Null-значения для атрибутов внешнего ключа допустимы только в том случае, когда атрибуты внешнего ключа не входят в состав никакого потенциального ключа



Определение 2

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



Определение 2

. Функциональная зависимость (функция) - это тройка объектов область определения), множество значений), Определение 2 ставится в соответствие один и только один элемент правило функциональной зависимости). Функциональная зависимость обычно обозначается как Определение 2. Замечание. Правило Функциональная зависимость атрибутов отношения тоже напоминает это определение. Действительно: В качестве области определения выступает домен, на котором определен атрибут Определение 2 является множеством атрибутов) В качестве множества значений выступает домен, на котором определен атрибут Правило Определение 2 найти любой кортеж отношения, содержащий это значение, 2) значение атрибута Определение 2.



Определение 2

. Пусть Определение 2, Определение 2 - некоторые из его атрибутов (или непересекающиеся множества атрибутов). Тогда атрибуты (множества атрибутов) Определение 2 многозначно зависят от Определение 2), тогда и только тогда, когда из того, что в отношении Определение 2 и Определение 2 содержится также и кортеж кЗамечание. Меняя местами кортежи Определение 2 в определении многозначной зависимости, получим, что в отношении Определение 2. Таким образом, атрибуты Определение 2, многозначно зависящие от Определение 2. В отношении "Абитуриенты-Факультеты-Предметы" имеется многозначная зависимость ФакультетСловами это можно выразить так - для каждого факультета (для каждого значения из Определение 2) сдает один и тот же список предметов (набор значений из Определение 2) каждый сдаваемый на факультете экзамен (значение из Определение 2). Именно наличие этой зависимости не позволяет независимо вставлять и удалять кортежи. Кортежи обязаны вставляться и удаляться одновременно целыми наборами. Замечание. Если в отношении Определение 2, Определение 2 и есть функциональная зависимость Определение 2. Действительно, действуя формально в соответствии с определением многозначной зависимости, предположим, что в отношении Определение 2 и Определение 2 отсюда следует, что Определение 2 в точности совпадает с кортежем Определение 2. Таким образом, имеется многозначная зависимость Таким образом, понятие многозначной зависимости является обобщением понятия функциональной зависимости.



Определение 2

. Экземпляр сущности - это конкретный представитель данной сущности. Например, представителем сущности "Сотрудник" может быть "Сотрудник Иванов". Экземпляры сущностей должны быть различимы, т.е. сущности должны иметь некоторые свойства, уникальные для каждого экземпляра этой сущности.



Определение 2

. Ограничение целостности - это некоторое утверждение, которое может быть истинным или ложным в зависимости от состояния базы данных.



Определение 2

. Последовательность, в которой выполняются элементарные операции заданного набора транзакций, называется графиком запуска набора транзакций. Замечание. Очевидно, что для заданного набора транзакций может быть несколько (вообще говоря, достаточно много) различных графиков запуска. Обеспечение изолированности пользователей, таким образом, сводится к выбору подходящего (в каком-то смысле правильного) графика запуска транзакций. Одновременно с этим график запуска должен быть оптимальным в некотором смысле, например, давать минимальное среднее время выполнения транзакций каждым пользователем. Далее мы уточним понятие "правильного" графика и сделаем некоторые замечания об оптимальности.

Если класс объектов, на которых



Определение 3

. Разностью двух множеств называется новое множество

Если класс объектов, на которых определяются различные множества обозначить Универсум), то дополнением множества



Определение 3

. Реляционной базой данных называется набор отношений.


Определение 3. База данных находится в согласованном (целостном) состоянии


, если выполнены (удовлетворены) все ограничения целостности, определенные для базы данных.

В данном определении важно подчеркнуть, что должны быть выполнены не все вообще ограничения предметной области, а только те, которые определены в базе данных. Для этого необходимо, чтобы СУБД обладала развитыми средствами поддержки ограничений целостности. Если какая-либо СУБД не может отобразить все необходимые ограничения предметной области, то такая база данных хотя и будет находиться в целостном состоянии с точки зрения СУБД, но это состояние не будет правильным с точки зрения пользователя.

Таким образом, согласованность базы данных есть формальное свойство базы данных. База данных не понимает "смысла" хранимых данных. "Смыслом" данных для СУБД является весь набор ограничений целостности. Если все ограничения выполнены, то СУБД считает, что данные корректны.

Вместе с понятием целостности базы данных возникает понятие реакции системы на попытку нарушения целостности. Система должна не только проверять, не нарушаются ли ограничения в ходе выполнения различных операций, но и должным образом реагировать, если операция приводит к нарушению целостности. Имеется два типа реакции на попытку нарушения целостности: Отказ выполнить "незаконную" операцию. Выполнение компенсирующих действий.

Например, если система знает, что в поле "Возраст_Сотрудника" должны быть целые числа в диапазоне от 18 до 65, то система отвергает попытку ввести значение возраста 66. При этом может генерироваться какое-нибудь сообщение для пользователя.

В противоположность этому, в примере 1 система допускает вставку записи о новом сотруднике (что приводит к нарушению целостности базы данных), но автоматически производит компенсирующие действия, изменяя значение поля Dept_Kol в таблице DEPART.

Работу системы по проверке ограничений можно изобразить на следующем рисунке:

Рисунок 1

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

произведением множеств



Определение 4

. Декартовым (прямым) произведением множеств



Определение 4

. Схемой реляционной базы данных называется набор заголовков отношений, входящих в базу данных. Хотя любое отношение можно изобразить в виде таблицы, нужно четко понимать, что отношения не являются таблицами. Это близкие, но не совпадающие понятия. Различия между отношениями и таблицами будут рассмотрены ниже. Термины, которыми оперирует реляционная модель данных, имеют соответствующие "табличные" синонимы:



Определение 4

. Вычитанием двух совместимых по типу отношений Определение 4 называется отношение с тем же заголовком, что и у отношений Определение 4, и телом, состоящим из кортежей, принадлежащих отношению Определение 4. Синтаксис операции вычитания:



Определение 4

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



Определение 4

. Отношение четвертой нормальной форме (4НФ) тогда и только тогда, когда отношение находится в НФБК и не содержит нетривиальных многозначных зависимостей. Отношение "Абитуриенты-Факультеты-Предметы" находится в НФБК, но не в 4НФ. Согласно теореме Фейджина, это отношение можно без потерь декомпозировать на отношения:



Определение 4

. Ключ сущности - это неизбыточный набор атрибутов, значения которых в совокупности являются уникальными для каждого экземпляра сущности. Неизбыточность заключается в том, что удаление любого атрибута из ключа нарушается его уникальность. Сущность может иметь несколько различных ключей. Ключевые атрибуты изображаются на диаграмме подчеркиванием:

Рис. 3



Определение 4

. Декларативная поддержка ограничений целостности заключается в определении ограничений средствами языка определения данных (DDL - Data Definition Language). Обычно средства декларативной поддержки целостности (если они имеются в СУБД) определяют ограничения на значения доменов и атрибутов, целостность сущностей (потенциальные ключи отношений) и ссылочную целостность (целостность внешних ключей). Декларативные ограничения целостности можно использовать при создании и модификации таблиц средствами языка DDL или в виде отдельных утверждений (ASSERTION). Например, следующий оператор создает таблицу PERSON и определяет для нее некоторые ограничения целостности: CREATE TABLE PERSON (Pers_Id INTEGER PRIMARY KEY, Pers_Name CHAR(30) NOT NULL, Dept_Id REFERENCES DEPART(Dept_Id) ON UPDATE CASCADE ON DELETE CASCADE); После выполнения оператора для таблицы PERSON будут объявлены следующие ограничения целостности: Поле Pers_Id образует потенциальный ключ отношения. Поле Pers_Name не может содержать null-значений. Поле Dept_Id является внешней ссылкой на родительскую таблицу DEPART, причем, при изменении или удалении строки в родительской таблице каскадно должны быть внесены соответствующие изменения в дочернюю таблицу. Средства декларативной поддержки ограничений описаны в стандарте SQL и более подробно рассматриваются ниже.



Определение 4

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



Если все множества



Определение 5

. Степенью декартового произведения Замечание. Если все множества



Определение 5

. Декартовым произведением двух отношений Определение 5 называется отношение, заголовок которого является сцеплением заголовков отношений Определение 5:

а тело состоит из кортежей, являющихся сцеплением кортежей отношений Определение 5:

таких, что Определение 5. Синтаксис операции декартового произведения: Замечание. Мощность произведения Определение 5 и Определение 5 соединяется с каждым кортежем отношения Замечание. Если в отношения Определение 5 имеются атрибуты с одинаковыми наименованиями, то перед выполнением операции декартового произведения такие атрибуты необходимо переименовать. Замечание. Перемножать можно любые два отношения, совместимость по типу при этом не требуется.



Определение 5

. Отношение третьей нормальной форме (3НФ) тогда и только тогда, когда отношение находится в 2НФ и все неключевые атрибуты взаимно независимы. Отношение СОТРУДНИКИ_ОТДЕЛЫ не находится в 3НФ, т.к. имеется функциональная зависимость неключевых атрибутов (зависимость номера телефона от номера отдела): Н_ОТД ТЕЛ Для того, чтобы устранить зависимость неключевых атрибутов, нужно произвести декомпозицию отношения на несколько отношений. При этом те неключевые атрибуты, которые являются зависимыми, выносятся в отдельное отношение. Отношение СОТРУДНИКИ_ОТДЕЛЫ декомпозируем на два отношения - СОТРУДНИКИ, ОТДЕЛЫ. Отношение СОТРУДНИКИ (Н_СОТР, ФАМ, Н_ОТД): Функциональные зависимости: Зависимость атрибутов, характеризующих сотрудника от табельного номера сотрудника: Н_СОТР ФАМ Н_СОТР Н_ОТД Н_СОТР ТЕЛ



Определение 5

. Пусть Определение 5, Определение 5 - произвольными ( возможно пересекающимися) подмножествами множества атрибутов отношения Определение 5 удовлетворяет зависимости соединения тогда и только тогда, когда оно равносильно соединению всех своих проекций с подмножествами атрибутов Определение 5, …, Можно предположить, что отношение Утверждать, что это именно так мы пока не можем, т.к. определение зависимости соединения должно выполняться для любого состояния отношения Покажем, что зависимость соединения является обобщением понятия многозначной зависимости. Действительно, согласно теореме Фейджина, отношение Определение 5 и Определение 5. Согласно определению зависимости соединения, теорема Фейджина может быть переформулирована следующим образом:



Определение 5

. Связь - это некоторая ассоциация между двумя сущностями. Одна сущность может быть связана с другой сущностью или сама с собою. Связи позволяют по одной сущности находить другие сущности, связанные с нею. Например, связи между сущностями могут выражаться следующими фразами - "СОТРУДНИК может иметь несколько ДЕТЕЙ", "каждый СОТРУДНИК обязан числиться ровно в одном ОТДЕЛЕ". Графически связь изображается линией, соединяющей две сущности:

Рис. 4Каждая связь имеет два конца и одно или два наименования. Наименование обычно выражается в неопределенной глагольной форме: "иметь", "принадлежать" и т.п. Каждое из наименований относится к своему концу связи. Иногда наименования не пишутся ввиду их очевидности. Каждая связь может иметь один из следующих типов связи:

Рис. 5Связь типа один-к-одному означает, что один экземпляр первой сущности (левой) связан с одним экземпляром второй сущности (правой). Связь один-к-одному чаще всего свидетельствует о том, что на самом деле мы имеем всего одну сущность, неправильно разделенную на две. Связь типа один-ко-многим означает, что один экземпляр первой сущности (левой) связан с несколькими экземплярами второй сущности (правой). Это наиболее часто используемый тип связи. Левая сущность (со стороны "один") называется родительской, правая (со стороны "много") - дочерней. Характерный пример такой связи приведен на Рис. 4. Связь типа много-ко-многим означает, что каждый экземпляр первой сущности может быть связан с несколькими экземплярами второй сущности, и каждый экземпляр второй сущности может быть связан с несколькими экземплярами первой сущности. Тип связи много-ко-многим является временным типом связи, допустимым на ранних этапах разработки модели. В дальнейшем этот тип связи должен быть заменен двумя связями типа один-ко-многим путем создания промежуточной сущности. Каждая связь может иметь одну из двух модальностей связи:

Рис. 6Модальность "может" означает, что экземпляр одной сущности может быть связан с одним или несколькими экземплярами другой сущности, а может быть и не связан ни с одним экземпляром. Модальность "должен" означает, что экземпляр одной сущности обязан быть связан не менее чем с одним экземпляром другой сущности. Связь может иметь разную модальность с разных концов (как на Рис. 4). Описанный графический синтаксис позволяет однозначно читать диаграммы, пользуясь следующей схемой построения фраз: <Каждый экземпляр СУЩНОСТИ 1> <МОДАЛЬНОСТЬ СВЯЗИ> <НАИМЕНОВАНИЕ СВЯЗИ> <ТИП СВЯЗИ> <экземпляр СУЩНОСТИ 2>. Каждая связь может быть прочитана как слева направо, так и справа налево. Связь на Рис. 4 читается так: Слева направо: "каждый сотрудник может иметь несколько детей". Справа налево: "Каждый ребенок обязан принадлежать ровно одному сотруднику".



Определение 5

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



Определение 5

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


Определение 6"



Определение 6

. Подмножество  Определение 6 называется отношением степени n (n-арным отношением).

Определение 6

. Выборкой (ограничением, селекцией) на отношении Определение 6 называется отношение с тем же заголовком, что и у отношения Определение 6 дают значение ИСТИНА. Определение 6и (или) скалярные выражения. В простейшем случае условие Определение 6, где Определение 6 и т.д.), а Определение 6 - атрибуты отношения Определение 6-выборки (тэта-выборки) или ограничения, селекции. Синтаксис операции выборки: или



Определение 6

. Проекция Определение 6 на множество атрибутов собственной, если множество атрибутов Определение 6 (т.е. множество атрибутов Определение 6).



Определение 6

. Зависимость соединения нетривиальной зависимостью соединения, если выполняется два условия: Одно из множеств атрибутов Определение 6. Ни одно из множеств атрибутов не совпадает со всем множеством атрибутов отношения Для удобства работы сформулируем это определение так же и в отрицательной форме:



Определение 6

. Два графика называются эквивалентными, если при их выполнении будет получен один и тот же результат, независимо от начального состояния базы данных.



Понятие отношения является очень важным



Определение 7

. Мощность множества кортежей, входящих в отношение мощностью отношения Замечание. Понятие отношения является очень важным не только с математической точки зрения. Понятие отношения фактически лежит в основе всей реляционной теории баз данных. Как будет показано ниже, отношения являются математическим аналогом таблиц. Сам термин "реляционное представление данных", впервые введенный Коддом [43], происходит от термина relation, понимаемом именно в смысле этого определения. Т.к. любое множество можно рассматривать как декартовое произведение степени 1, то любое подмножество, как и любое множество, можно считать отношением степени 1. Это не очень интересный пример, свидетельствующий лишь о том, что термины "отношение степени 1" и "подмножество" являются синонимами. Нетривиальность понятия отношения проявляется, когда степень отношения больше 1. Ключевыми здесь являются два момента: Во-первых, все элементы отношения есть однотипные кортежи. Однотипность кортежей позволяет считать их аналогами строк в простой таблице, т.е. в такой таблице, в которой все строки состоят из одинакового числа ячеек и в соответствующих ячейках содержатся одинаковые типы данных. Например, отношение, состоящее из трех следующих кортежей {(1, "Иванов", 1000), (2, "Петров", 2000), (3, "Сидоров", 3000)} можно считать таблицей, содержащей данные о сотрудниках и их зарплатах. Такая таблица будет иметь три строки и три колонки, причем в каждой колонке содержатся данные одного типа. В противоположность этому рассмотрим множество {(1), (1, 2), (1, 2, 3)}, состоящее из разнотипных числовых кортежей. Это множество не является отношением ни в Определение 7, ни в Определение 7, но такая трактовка ничего нового, по сравнению с понятием подмножества, не дает. Во-вторых. За исключением крайнего случая, когда отношение есть само декартово произведение Действительно, каждому отношению можно поставить в соответствие некоторое логическое выражение Определение 7 принадлежать отношению предикатом отношения Определение 7 принадлежит отношению Определение 7 принимает значение "истина". В свою очередь, каждый n-местный предикат задает некоторое n-арное отношение. Таким образом, существует взаимно однозначное соответствие между n-арными отношениями и n-местными предикатами. Если это не вызывает путаницы, удобно и отношение, и его предикат обозначать одной и той же буквой. Например, отношение Определение 7.

Определение 7

. Проекцией отношения Определение 7, где каждый из атрибутов принадлежит отношению Определение 7 и телом, содержащим множество кортежей вида Определение 7 найдутся кортежи со значением атрибута Определение 7, значением атрибута Определение 7, …, значением атрибута Определение 7. Синтаксис операции проекции: Замечание. Операция проекции дает "вертикальный срез" отношения, в котором удалены все возникшие при таком срезе дубликаты кортежей.



Определение 7

. Собственные проекции Определение 7 отношения декомпозицией без потерь, если отношение Определение 7:

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



Определение 7

. Зависимость соединения тривиальной зависимостью соединения, если выполняется одно из условий: Либо все множества атрибутов Определение 7. Либо одно из множеств атрибутов совпадает со всем множеством атрибутов отношения



Определение 7

. Ограничения с отложенной проверкой проверяется в момент фиксации транзакции оператором COMMIT WORK. Внутри транзакции ограничение может не выполняться. Если в момент фиксации транзакции обнаруживается нарушение ограничения с отложенной проверкой, то транзакция откатывается.



Определение 7

. График запуска транзакции называется верным (сериализуемым), если он эквивалентен какому-либо последовательному графику. Замечание. При выполнении двух различных последовательных (а, следовательно, верных) графиков, содержащих один и тот же набор транзакций, могут быть получены различные результаты. Действительно, пусть транзакция A заключается в действии "Сложить X с 1", а транзакция B - "Удвоить X". Тогда последовательный график {A, B} даст результат 2(X+1), а последовательный график {B, A} даст результат 2X+1. Таким образом, может существовать несколько верных графиков запусков транзакций, приводящих к разным результатам при одном и том же начальном состоянии базы данных. Задача обеспечения изолированной работы пользователей не сводится просто к нахождению правильных (сериальных) графиков запусков транзакций. Если бы этого было достаточно, то лучшим был бы простейший способ сериализации - ставить транзакции в общую очередь по мере их поступления и выполнять строго последовательно. Таким способом автоматически будет получен правильный (сериальный) график. Проблема в том, что этот график будет неоптимальным с точки зрения общей производительности системы. Получается ситуация, в которой борются противоположные силы - с одной стороны, стремление обеспечить сериальность за счет ухудшения общей эффективности работы, с другой стороны, стремление улучшить общую эффективность за счет ухудшения сериальности. Один крайний случай (выполнение транзакций по очереди) мы рассмотрели. Рассмотрим другой крайний случай - попытаемся достичь оптимального графика - т.е. графика с максимальной эффективностью выполнения транзакций. Для этого сначала нужно уточнить понятие "оптимальность". С каждым возможным графиком запуска транзакций мы можем связать значение некоей стоимостной функции. В качестве стоимостной функции можно взять, например, суммарное время выполнения всех транзакций в наборе. Время выполнения одной транзакции считается от момента, когда транзакция возникла и до момента, когда транзакция выполнила свою последнюю элементарную операцию. Это время складывается из следующих компонентов: Время ожидания начала транзакции - то время, которое проходит от момента, когда транзакция возникла до момента, когда началась реально выполняться ее первая элементарная операция. Сумма времен выполнения элементарных операций транзакции. Сумма времен всех элементарных операций других транзакций, вклинившихся между элементарными операциями транзакции. Оптимальным будет график, дающий минимум стоимостной функции. Очевидно, оптимальность графика запуска зависит от выбора стоимостной функции, т.е. график, оптимальный с точки зрения одних критериев (например, с точки зрения приведенной функции стоимости) не будет оптимальным с точки зрения других критериев (например, с точки зрения достижения максимально быстрого начала выполнения каждой транзакции). Рассмотрим следующую гипотетическую ситуацию. Предположим, что нам заранее на некоторый промежуток времени наперед известно, какие транзакции в какие моменты поступят, т.е. заранее известна вся будущая смесь транзакций и моменты поступления каждой транзакции:Транзакция Определение 7. Транзакция Определение 7. … Транзакция Определение 7.В этом случае, т.к. набор всех транзакций заранее известен, теоретически можно перебрать все возможные варианты графиков запусков (их конечное число, хотя и очень большое), и выбрать из них те графики, которые, во-первых, правильные, а во-вторых, оптимальны по выбранному критерию. В этом случае оптимальный график запуска транзакций достижим. В реальной ситуации, однако, неизвестно не только какие транзакции будут поступать в какие моменты времени, но и неизвестна длительность периода времени, охватывающего набор транзакций. Реально, система может непрерывно работать несколько дней или месяцев и в этом случае набором транзакций будет набор всех транзакций за этот период. С другой стороны, прекращение работы сервера может произойти в любой момент либо по команде администратора системы, либо в результате сбоя. Необходимо, следовательно, чтобы система работала так, чтобы к любому моменту времени набор выполненных и выполняющихся в этот момент транзакций был бы правильным и не слишком далек от оптимального. Т.к. транзакции не мешают друг другу, если они обращаются к разным данным или выполняются в разное время, то имеется два способа разрешить конкуренцию между поступающими в произвольные моменты транзакциями: "Притормаживать" некоторые из поступающих транзакций настолько, насколько это необходимо для обеспечения правильности смеси транзакций в каждый момент времени (т.е. обеспечить, чтобы конкурирующие транзакции выполнялись в разное время). Предоставить конкурирующим транзакциям "разные" экземпляры данных (т.е. обеспечить, чтобы конкурирующие транзакции работали с разными версиями данными). Первый метод - "притормаживание" транзакций - реализуется путем использованием блокировок различных видов или метода временных меток. Второй метод - предоставление разных версий данных - реализуется путем использованием данных из журнала транзакций.



Обычно отношение эквивалентности обозначают знаком



Определение 8

. Отношение Определение 8 называется отношением эквивалентности, если оно обладает следующими свойствами: Определение 8 (рефлексивность) Если Определение 8 (симметричность) Если Определение 8, то Обычно отношение эквивалентности обозначают знаком Определение 8 и говорят, что оно (отношение) задано на множестве Определение 8). Условия 1-3 в таких обозначениях выглядят более естественно: Определение 8 (рефлексивность) Если Определение 8 (симметричность) Если Определение 8, то Легко доказывается, что если на множестве Определение 8 разбивается на взаимно непересекающиеся подмножества, состоящие из эквивалентных друг другу элементов (классы эквивалентности).

Определение 8

. Соединением отношений Определение 8 по условию Определение 8 и Таким образом, операция соединения есть результат последовательного применения операций декартового произведения и выборки. Если в отношениях Определение 8 имеются атрибуты с одинаковыми наименованиями, то перед выполнением соединения такие атрибуты необходимо переименовать.



Определение 8

. Отношение пятой нормальной форме (5НФ) тогда и только тогда, когда любая имеющаяся зависимость соединения является тривиальной. Определения 5НФ может стать более понятным, если сформулировать его в отрицательной форме:



Определение 8

. Ограничения целостности домена представляют собой ограничения, накладываемые только на допустимые значения домена. Фактически, ограничения домена обязаны являться частью определения домена (см. определение домена в гл. 2). Например, ограничением домена "Возраст сотрудника" может быть условие "Возраст сотрудника не менее 18 и не более 65". Проверка ограничения. Ограничения домена сами по себе не проверяются. Если на каком-либо домене основан атрибут, то ограничение соответствующего домена становится ограничением этого атрибута.



Обычно отношение порядка обозначают знаком



Определение 9

. Отношение Определение 9 называется отношением порядка, если оно обладает следующими свойствами: Определение 9 (рефлексивность) Если Определение 9, то Если Определение 9, то Обычно отношение порядка обозначают знаком Определение 9 и Определение 9, то говорят, что Определение 9. Как и для отношения эквивалентности, условия 1-3 в таких обозначениях выглядят более естественно: Определение 9 (рефлексивность) Если Определение 9, то Если Определение 9, то

Определение 9

. Пусть отношение Определение 9, отношение Определение 9, а Определение 9 и т.д.). Тогда соединением отношения Определение 9 с отношением Определение 9 называют отношение Это частный случай операции общего соединения. Иногда, для операции



Определение 9

. Отношение 5НФ, если в отношении найдется нетривиальная зависимость соединения. Возвращаясь к примеру 3, становится понятно, что не зная ничего о том, какие потенциальные ключи имеются в отношении и как взаимосвязаны атрибуты, нельзя делать выводы о том, находится ли данное отношение в 5НФ (как, впрочем, и в других нормальных формах). По данному конкретному примеру можно только предположить, что отношение в примере 3 не находится в 5НФ. Предположим, что анализ предметной области позволил выявить следующие зависимости атрибутов в отношении (i) Отношение (ii) Имеется следующая зависимость (довольно странная, с практической точки зрения): если в отношении Определение 9, Определение 9, то отсюда следует, что в отношении Определение 9. Утверждение. Докажем, что при наличии ограничений (i) и (ii), отношение находится в 4НФ, но не в 5НФ. Доказательство. Покажем, что отношение Покажем, что отношение не находится в 5НФ. Для этого нужно привести пример нетривиальной зависимости соединения. Естественным кандидатом на нее является Определение 9, Определение 9 не совпадает с множеством всех атрибутов отношения Но является ли такая декомпозиция именно зависимостью соединения? Для этого нужно показать, что декомпозиция на три проекции Определение 9 и Определение 9 (именно здесь содержится ключевая тонкость, обычно пропускаемая при анализе конкретного состояния отношения Как и в предыдущих доказательствах, нужно доказать, что Определение 9. Включение Определение 9. Докажем включение Пусть кортеж Определение 9 содержится кортеж Определение 9 содержится кортеж Определение 9 содержится кортеж Определение 9, Определение 9 атрибутов Определение 9 и Определение 9 содержит кортежи Определение 9 и Определение 9 содержится также и кортеж Утверждение доказано.



Определение 9

. Ограничение целостности атрибута представляют собой ограничения, накладываемые на допустимые значения атрибута вследствие того, что атрибут основан на каком-либо домене. Ограничение атрибута в точности совпадают с ограничениями соответствующего домена. Отличие ограничений атрибута от ограничений домена в том, что ограничения атрибута проверяются. Если логика предметной области такова, что на значения атрибута необходимо наложить дополнительные ограничения, помимо ограничений домена, то такие ограничения переходят в следующую категорию. Проверка ограничения. Ограничение атрибута является немедленно проверяемым ограничением. Действительно, ограничение атрибута не зависит ни от каких других объектов базы данных, кроме домена, на котором основан атрибут. Поэтому никакие изменения в других объектах не могут повлиять на истинность ограничения.



Предикат функционального отношения есть просто



Определение 10

. Отношение Определение 10 называется функциональным отношением, если оно обладает следующим свойством: Если Определение 10, то Обычно, функциональное отношение обозначают в виде функциональной зависимости - Определение 10. Функциональные отношения (подмножества декартового произведения!) называют иначе графиком функции или графиком функциональной зависимости. Предикат функционального отношения есть просто выражение функциональной зависимости

Определение 10

. Пусть даны отношения Определение 10, имеющие одинаковые атрибуты Тогда естественным соединением отношений Определение 10 называется отношение с заголовком Определение 10, таких, что Определение 10. Естественное соединение настолько важно, что для него используют специальный синтаксис: Замечание. В синтаксисе естественного соединения не указываются, по каким атрибутам производится соединение. Естественное соединение производится по всем одинаковым атрибутам. Замечание. Естественное соединение эквивалентно следующей последовательности реляционных операций: Переименовать одинаковые атрибуты в отношениях Выполнить декартово произведение отношений Выполнить выборку по совпадающим значениям атрибутов, имевших одинаковые имена Выполнить проекцию, удалив повторяющиеся атрибуты Переименовать атрибуты, вернув им первоначальные имена Замечание. Можно выполнять последовательное естественное соединение нескольких отношений. Нетрудно проверить, что естественное соединение (как, впрочем, и соединение общего вида) обладает свойством ассоциативности, т.е. поэтому такие соединения можно записывать, опуская скобки:



Определение 10

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


Определение 11.



Определение 11.

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

Очевидно, что



Определение 11

. Пусть даны отношения Определение 11, причем атрибуты Делением отношений Определение 11 называется отношение с заголовком Определение 11, таких, что для всех кортежей Определение 11 найдется кортеж Отношение делимого, отношение делителя. Деление отношений аналогично делению чисел с остатком. Синтаксис операции деления: Замечание. Типичные запросы, реализуемые с помощью операции деления, обычно в своей формулировке имеют слово "все" - "какие поставщики поставляют все детали?".



Определение 11

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



представляют ограничения, накладываемые на значения



Определение 12

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

Определение функциональной зависимости...


!) применяется метод нормализации отношений. Нормализация основана на понятии функциональной зависимости атрибутов отношения.



Определение функциональной зависимости в отношении гарантирует, что найденное значение

, поэтому правило определено корректно.

Отличие от математического понятия отношения состоит в том, что, если рассматривать математическое понятие функции, то для фиксированного значения Определение функциональной зависимости в отношении гарантирует, что найденное значение не зависит от выбора кортежа всегда одно и то же. Например, если задана функция Определение функциональной зависимости в отношении гарантирует, что найденное значение не зависит от выбора кортежа соответствующее значение ФАМ функционально зависит от атрибута Н_СОТР. Предположим, что сейчас сотрудник с табельным номером 1 имеет фамилию Иванов, т.е. при значении детерминанта равного 1, значение зависимого аргумента равно "Иванов". Но сотрудник может сменить фамилию, например на "Сидоров". Теперь при том же значении детерминанта, равного 1, значение зависимого аргумента равно "Сидоров".

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

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



Определение столбца



Определение столбца

::=
Имя столбца {Имя домена | Тип данных [Размер]}
[Ограничение столбца…]
[DEFAULT Значение по умолчанию]

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

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



Определение столбца

}
| {ALTER [COLUMN] Имя столбца {SET DEFAULT Значение по умолчанию | DROP DEFAULT}}
| {DROP [COLUMN] Имя столбца RESTRICT | CASCADE}
| {ADD Ограничение таблицы}
| {DROP CONSTRAINT Имя ограничения RESTRICT | CASCADE}

Этот оператор позволяет изменять имеющуюся таблицу. В таблице можно удалять или добавлять колонки и/или ограничения. Кроме того, для колонок можно менять значение по умолчанию.

DROP TABLE Имя таблицы CASCADE | RESTRICT

Этот оператор позволяет удалять имеющуюся таблицу. Вместе с таблицей удаляются и ограничения, определенные для этой таблицы.

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

Если указан параметр CASCADE, то удаляются также и все объекты, ссылающиеся на эту таблицу.

CREATE ASSERTION Имя утверждения
Ограничение check
[Атрибуты ограничения]

Этот оператор позволяет создавать утверждения - т.е. ограничения, не являющиеся частью определения домена, колонки или таблицы.

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





Определения и примеры



Определения и примеры

Фундаментальным понятием реляционной модели данных является понятие отношения. В определении понятия отношения будем следовать книге К. Дейта [11].

Основной пример



Основной пример

Рассмотрим в качестве предметной области некоторую организацию, выполняющую некоторые проекты. Модель предметной области опишем следующим неформальным текстом: Сотрудники организации выполняют проекты. Проекты состоят из нескольких заданий. Каждый сотрудник может участвовать в одном или нескольких проектах, или временно не участвовать ни в каких проектах. Над каждым проектом может работать несколько сотрудников, или временно проект может быть приостановлен, тогда над ним не работает ни один сотрудник. Над каждым заданием в проекте работает ровно один сотрудник. Каждый сотрудник числится в одном отделе. Каждый сотрудник имеет телефон, находящийся в отделе сотрудника.

В ходе дополнительного уточнения того, какие данные необходимо учитывать, выяснилось следующее: О каждом сотруднике необходимо хранить табельный номер и фамилию. Табельный номер является уникальным для каждого сотрудника. Каждый отдел имеет уникальный номер. Каждый проект имеет номер и наименование. Номер проекта является уникальным. Каждая работа из проекта имеет номер, уникальный в пределах проекта. Работы в разных проектах могут иметь одинаковые номера.

Оставшиеся аномалии обновления (update)



Оставшиеся аномалии обновления (UPDATE)

Одни и те же номера телефонов повторяются во многих кортежах отношения. Поэтому если в отделе меняется номер телефона, то такие изменения необходимо одновременно выполнить во всех местах, где этот номер телефона встречаются, иначе отношение станет некорректным. Таким образом, обновление базы данных одним действием реализовать невозможно. Необходимо написать триггер, который при обновлении одной записи корректно исправляет номера телефонов в других местах.

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

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

Оставшиеся аномалии удаления (delete)



Оставшиеся аномалии удаления (DELETE)

При удалении некоторых данных по-прежнему может произойти потеря другой информации. Например, если удалить сотрудника Сидорова, то будет потеряна информация о том, что в отделе номер 2 находится телефон 33-22-11.

Причина аномалии - хранение в одном отношении разнородной информации (и о сотрудниках, и об отделах).

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

Заметим, что при переходе ко второй нормальной форме отношения стали почти адекватными предметной области. Остались также трудности в разработке базы данных, связанные с необходимостью написания триггеров, поддерживающих целостность базы данных. Эти трудности теперь связаны только с одним отношением СОТРУДНИКИ_ОТДЕЛЫ.

Оставшиеся аномалии вставки (insert)



Оставшиеся аномалии вставки (INSERT)

В отношение СОТРУДНИКИ_ОТДЕЛЫ нельзя вставить кортеж (4, Пушников, 1, 33-22-11), т.к. при этом получится, что два сотрудника из 1-го отдела (Иванов и Пушников) имеют разные номера телефонов, а это противоречит модели предметной области. В этой ситуации можно предложить два решения, в зависимости от того, что реально произошло в предметной области. Другой номер телефона может быть введен по двум причинам - по ошибке человека, вводящего данные о новом сотруднике, или потому что номер в отделе действительно изменился. Тогда можно написать триггер, который при вставке записи о сотруднике проверяет, совпадает ли телефон с уже имеющимся телефоном у другого сотрудника этого же отдела. Если номера отличаются, то система должна задать вопрос, оставить ли старый номер в отделе или заменить его новым. Если нужно оставить старый номер (новый номер введен ошибочно), то кортеж с данными о новом сотруднике будет вставлен, но номер телефона будет у него будет тот, который уже есть в отделе (в данном случае, 11-22-33). Если же номер в отделе действительно изменился, то кортеж будет вставлен с новым номером, и одновременно будут изменены номера телефонов у всех сотрудников этого же отдела. И в том и в другом случае не обойтись без разработки громоздкого триггера.

Причина аномалии - избыточность данных, порожденная тем, что в одном отношении хранится разнородная информация (о сотрудниках и об отделах).

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

Отношения, совместимые по типу



Отношения, совместимые по типу

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

Первая нормальная форма



Первая нормальная форма

Труднее всего дать определение вещей, которые всем понятны. Если давать не строгое, описательное определение, то всегда остается возможность неправильной его трактовки. Если дать строгое формальное определение, то оно, как правило, или тривиально, или слишком громоздко. Именно такая ситуация с определением отношения в Первой Нормальной Форме (1НФ). Совсем не говорить об этом нельзя, т.к. на основе 1НФ строятся более высокие нормальные формы, которые рассматриваются далее в гл. 6 и 7. Дать определение 1НФ сложно ввиду его тривиальности. Поэтому, дадим просто несколько объяснений.

Объяснение 1. Говорят, что отношение

Это, собственно, тавтология, ведь из определения 2 следует, что других отношений не бывает. Действительно, определение 2 описывает, что является отношением, а что - нет, следовательно, отношений в непервой нормальной форме просто нет.

Объяснение 2. Говорят, что отношение

Опять же, определение 2 опирается на понятие домена, а домены определены на простых типах данных.

Непервую нормальную форму можно получить, если допустить, что атрибуты отношения могут быть определены на сложных типах данных - массивах, структурах, или даже на других отношениях. Легко себе представить таблицу, у которой в некоторых ячейках содержатся массивы, в других ячейках - определенные пользователями сложные структуры, а в третьих ячейках - целые реляционные таблицы, которые в свою очередь могут содержать такие же сложные объекты. Именно такие возможности предоставляются некоторыми современными пост-реляционными и объектными СУБД.

Требование, что отношения должны содержать только данные простых типов, объясняет, почему отношения иногда называют плоскими таблицами (plain table). Действительно, таблицы, задающие отношения двумерны. Одно измерение задается списком столбцов, второе измерение задается списком строк. Пара координат (Номер строки, Номер столбца) однозначно идентифицирует ячейку таблицы и содержащееся в ней значение. Если же допустить, что в ячейке таблицы могут содержаться данные сложных типов (массивы, структуры, другие таблицы), то такая таблица будет уже не плоской. Например, если в ячейке таблицы содержится массив, то для обращения к элементу массива нужно знать три параметра (Номер строки, Номер столбца, номер элемента в массиве).

Таким образом появляется третье объяснение Первой Нормальной Формы:

Объяснение 3. Отношение

Мы сознательно ограничиваемся рассмотрением только классической реляционной теории, в которой все отношения имеют только атомарные атрибуты и заведомо находятся в 1НФ.

Плохая нормализация отношений



Плохая нормализация отношений

Данный пример взят из книги Гилуа М.М. [6, стр.43].



это последовательность операторов манипулирования данными,



Определение 1

. Транзакция - это последовательность операторов манипулирования данными, выполняющаяся как единое целое (все или ничего) и переводящая базу данных из одного целостного состояния в другое целостное состояние. Транзакция обладает четырьмя важными свойствами, известными как свойства АСИД: (А) Атомарность. Транзакция выполняется как атомарная операция - либо выполняется вся транзакция целиком, либо она целиком не выполняется. (С) Согласованность. Транзакция переводит базу данных из одного согласованного (целостного) состояния в другое согласованное (целостное) состояние. Внутри транзакции согласованность базы данных может нарушаться. (И) Изоляция. Транзакции разных пользователей не должны мешать друг другу (например, как если бы они выполнялись строго по очереди). (Д) Долговечность. Если транзакция выполнена, то результаты ее работы должны сохраниться в базе данных, даже если в следующий момент произойдет сбой системы. Транзакция обычно начинается автоматически с момента присоединения пользователя к СУБД и продолжается до тех пор, пока не произойдет одно из следующих событий: Подана команда COMMIT WORK (зафиксировать транзакцию). Подана команда ROLLBACK WORK (откатить транзакцию). Произошло отсоединение пользователя от СУБД. Произошел сбой системы. Команда COMMIT WORK завершает текущую транзакцию и автоматически начинает новую транзакцию. При этом гарантируется, что результаты работы завершенной транзакции фиксируются, т.е. сохраняются в базе данных. Замечание. Некоторые системы (например, Visual FoxPro), требуют подать явную команду BEGIN TRANSACTION для того, чтобы начать новую транзакцию. Команда ROLLBACK WORK приводит к тому, что все изменения, сделанные текущей транзакцией откатываются, т.е. отменяются так, как будто их вообще не было. При этом автоматически начинается новая транзакция. При отсоединении пользователя от СУБД происходит автоматическая фиксация транзакций. При сбое системы происходят более сложные процессы. Кратко суть их сводится к тому, что при последующем запуске системы происходит анализ выполнявшихся до момента сбоя транзакций. Те транзакции, для которых была подана команда COMMIT WORK, но результаты работы которых не были занесены в базу данных выполняются снова (накатываются). Те транзакции, для которых не была подана команда COMMIT WORK, откатываются. Более подробно восстановление после сбоев рассматривается далее. Свойства АСИД транзакций не всегда выполняются в полном объеме. Особенно это относится к свойству И (изоляция). В идеале, транзакции разных пользователей не должны мешать друг другу, т.е. они должны выполняться так, чтобы у пользователя создавалась иллюзия, что он в системе один. Простейший способ обеспечить абсолютную изолированность состоит в том, чтобы выстроить транзакции в очередь и выполнять их строго одну за другой. Очевидно, при этом теряется эффективность работы системы. Поэтому реально одновременно выполняется несколько транзакций (смесь транзакций). Различается несколько уровней изоляции транзакций. На низшем уровне изоляции транзакции могут реально мешать друг другу, на высшем они полностью изолированы. За большую изоляцию транзакций приходится платить большими накладными расходами системы и замедлением работы. Пользователи или администратор системы могут по своему усмотрению задавать различные уровни всех или отдельных транзакций. Более подробно изоляция транзакций рассматривается в следующей главе. Свойство Д (долговечность) также не является абсолютными свойством, т.к. некоторые системы допускают вложенные транзакции. Если транзакция Б запущена внутри транзакции А, и для транзакции Б подана команда COMMIT WORK, то фиксация данных транзакции Б является условной, т.к. внешняя транзакция А может откатиться. Результаты работы внутренней транзакции Б будут окончательно зафиксированы только если будет зафиксирована внешняя транзакция А.

Порядок выполнения оператора select



Порядок выполнения оператора SELECT

Для того чтобы понять, как получается результат выполнения оператора SELECT, рассмотрим концептуальную схему его выполнения. Эта схема является именно концептуальной, т.к. гарантируется, что результат будет таким, как если бы он выполнялся шаг за шагом в соответствии с этой схемой. На самом деле, реально результат получается более изощренными алгоритмами, которыми "владеет" конкретная СУБД.

Потенциальные ключи



Потенциальные ключи

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

Предикатные блокировки



Предикатные блокировки

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

Поскольку любая операция над реляционной базой данных задается некоторым условием (т.е. в ней указывается не конкретный набор объектов базы данных, над которыми нужно выполнить операцию, а условие, которому должны удовлетворять объекты этого набора), то удобным способом было бы S или X-блокирование именно этого условия. Однако при попытке использовать этот метод в реальной СУБД возникает трудность определения совместимости различных условий. Действительно, в языке SQL допускаются условия с подзапросами и другими сложными предикатами. Проблема совместимости сравнительно легко решается для случая простых условий, имеющих вид:

{Имя атрибута {= | <> | > | >= | < | <=} Значение}

[{OR | AND} {Имя атрибута {= | <> | > | >= | < | <=} Значение}.,..]

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

Заметим, что блокировка всей таблицы в каком-либо режиме фактически есть предикатная блокировка, т.к. каждая таблица имеет предикат, определяющий какие строки содержатся в таблице и блокировка таблицы есть блокировка предиката этой таблицы.

Преднамеренные блокировки



Преднамеренные блокировки

Как видно из анализа поведения транзакций, при использовании протокола доступа к данным не решается проблема фантомов. Это происходит оттого, что были рассмотрены только блокировки на уровне строк. Можно рассматривать блокировки и других объектов базы данных: Блокировка самой базы данных. Блокировка файлов базы данных. Блокировка таблиц базы данных. Блокировка страниц (Единиц обмена с диском, обычно 2-16 Кб. На одной странице содержится несколько строк одной или нескольких таблиц). Блокировка отдельных строк таблиц. Блокировка отдельных полей.

Кроме того, можно блокировать индексы, заголовки таблиц или другие объекты.

Чем крупнее объект блокировки, тем меньше возможностей для параллельной работы. Достоинством блокировок крупных объектов является уменьшение накладных расходов системы и решение проблем, не решаемых с использованием блокировок менее крупных объектов. Например, использование монопольной блокировки на уровне таблицы, очевидно, решает проблему фантомов.

Современные СУБД, как правило, поддерживают минимальный уровень блокировки на уровне строк или страниц. (В старых версиях настольной СУБД Paradox поддерживалась блокировка на уровне отдельных полей.).

При использовании блокировок объектов разной величины возникает проблема обнаружения уже наложенных блокировок. Если транзакция A пытается заблокировать таблицу, то необходимо иметь информацию, не наложены ли уже блокировки на уровне строк этой таблицы, несовместимые с блокировкой таблицы. Для решения этой проблемы используется протокол преднамеренных блокировок, являющийся расширением протокола доступа к данным. Суть этого протокола в том, что перед тем, как наложить блокировку на объект (например, на строку таблицы), необходимо наложить специальную преднамеренную блокировку (блокировку намерения) на объекты, в состав которых входит блокируемый объект - на таблицу, содержащую строку, на файл, содержащий таблицу, на базу данных, содержащую файл. Тогда наличие преднамеренной блокировки таблицы будет свидетельствовать о наличии блокировки строк таблицы и для другой транзакции, пытающейся блокировать целую таблицу не нужно проверять наличие блокировок отдельных строк. Более точно, вводятся следующие новые типы блокировок: Преднамеренная блокировка с возможностью взаимного доступа (IS-блокировка - Intent Shared lock). Накладывается на некоторый составной объект T и означает намерение блокировать некоторый входящий в T объект в режиме S-блокировки. Например, при намерении читать строки из таблицы T, эта таблица должна быть заблокирована в режиме IS (до этого в таком же режиме должен быть заблокирован файл). Преднамеренная блокировка без взаимного доступа (IX-блокировка - Intent eXclusive lock). Накладывается на некоторый составной объект T и означает намерение блокировать некоторый входящий в T объект в режиме X-блокировки. Например, при намерении удалять или модифицировать строки из таблицы T эта таблица должна быть заблокирована в режиме IX (до этого в таком же режиме должен быть заблокирован файл). Преднамеренная блокировка как с возможностью взаимного доступа, так и без него (SIX-блокировка - Shared Intent eXclusive lock). Накладывается на некоторый составной объект T и означает разделяемую блокировку всего этого объекта с намерением впоследствии блокировать какие-либо входящие в него объекты в режиме X-блокировок. Например, если выполняется длинная операция просмотра таблицы с возможностью удаления некоторых просматриваемых строк, то можно заблокировать эту таблицу в режиме SIX (до этого захватить файл в режиме IS).

IS, IX и SIX-блокировки должны накладываться на сложные объекты базы данных (таблицы, файлы). Кроме того, на сложные объекты могут накладываться и блокировки типов S и X. Для сложных объектов (например, для таблицы базы данных) таблица совместимости блокировок имеет следующий вид:

При обновлении кортежа в дочернем отношении



При обновлении кортежа в дочернем отношении

Допустимые стратегии:

RESTRICT (ОГРАНИЧИТЬ) - не разрешать обновление, если внешний ключ в обновляемом кортеже становится не соответствующим ни одному значению потенциального ключа родительского отношения.

SET NULL (УСТАНОВИТЬ В NULL) - обновить кортеж, но в качестве значения внешнего ключа занести не предлагаемое пользователем некорректное значение, а null-значение.

SET DEFAULT (УСТАНОВИТЬ ПО УМОЛЧАНИЮ) - обновить кортеж, но в качестве значения внешнего ключа занести не предлагаемое пользователем некорректное значение, а некоторое значение, принятое по умолчанию.

IGNORE (ИГНОРИРОВАТЬ) - обновить кортеж, не обращая внимания на нарушения ссылочной целостности.

При обновлении кортежа в родительском отношении



При обновлении кортежа в родительском отношении

Допустимые стратегии:

RESTRICT (ОГРАНИЧИТЬ) - не разрешать обновление, если имеется хотя бы один кортеж в дочернем отношении, ссылающийся на обновляемый кортеж.

CASCADE (КАСКАДИРОВАТЬ) - выполнить обновление и каскадно изменить значения внешних ключей во всех кортежах дочернего отношения, ссылающихся на обновляемый кортеж.

SET NULL (УСТАНОВИТЬ В NULL) - выполнить обновление и во всех кортежах дочернего отношения, ссылающихся на обновляемый кортеж, изменить значения внешних ключей на null-значение.

SET DEFAULT (УСТАНОВИТЬ ПО УМОЛЧАНИЮ) - выполнить обновление и во всех кортежах дочернего отношения, ссылающихся на обновляемый кортеж, изменить значения внешних ключей на некоторое значение, принятое по умолчанию.

IGNORE (ИГНОРИРОВАТЬ) - выполнить обновление, не обращая внимания на нарушения ссылочной целостности.

При удалении кортежа в родительском отношении



При удалении кортежа в родительском отношении

Допустимые стратегии:

RESTRICT (ОГРАНИЧИТЬ) - не разрешать удаление, если имеется хотя бы один кортеж в дочернем отношении, ссылающийся на удаляемый кортеж.

CASCADE (КАСКАДИРОВАТЬ) - выполнить удаление и каскадно удалить кортежи в дочернем отношении, ссылающиеся на удаляемый кортеж.

SET NULL (УСТАНОВИТЬ В NULL) - выполнить удаление и во всех кортежах дочернего отношения, ссылающихся на удаляемый кортеж, изменить значения внешних ключей на null-значение.

SET DEFAULT (УСТАНОВИТЬ ПО УМОЛЧАНИЮ) - выполнить удаление и во всех кортежах дочернего отношения, ссылающихся на удаляемый кортеж, изменить значения внешних ключей на некоторое значение, принятое по умолчанию.

IGNORE (ИГНОРИРОВАТЬ) - выполнить удаление, не обращая внимания на нарушения ссылочной целостности.

При вставке кортежа в дочернее отношение



При вставке кортежа в дочернее отношение

Допустимые стратегии:

RESTRICT (ОГРАНИЧИТЬ) - не разрешать вставку, если внешний ключ во вставляемом кортеже не соответствует ни одному значению потенциального ключа родительского отношения.

SET NULL (УСТАНОВИТЬ В NULL) - вставить кортеж, но в качестве значения внешнего ключа занести не предлагаемое пользователем некорректное значение, а null-значение.

SET DEFAULT (УСТАНОВИТЬ ПО УМОЛЧАНИЮ) - вставить кортеж, но в качестве значения внешнего ключа занести не предлагаемое пользователем некорректное значение, а некоторое значение, принятое по умолчанию.

IGNORE (ИГНОРИРОВАТЬ) - вставить кортеж, не обращая внимания на нарушения ссылочной целостности.

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



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

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