
- •Базы данных, знаний и экспертные системы
- •1 . Элементы реляционной алгебры
- •1.1 . Обзор реляционной алгебры
- •1.2 . Замкнутость реляционной алгебры
- •1.3 . Отношения, совместимые по типу
- •1.3.1 Оператор переименования атрибутов
- •1.4.1 Объединение
- •1.4.2 Пересечение
- •1.4.3 Вычитание
- •1.4.4 Декартово произведение
- •1.5 . Специальные реляционные операторы
- •1.5.1 Выборка (ограничение, селекция)
- •1.5.2 Проекция
- •1.5.3 Соединение
- •1.5.3.1 Общая операция соединения
- •1.5.3.2 Тэта-соединение
- •1.5.3.3 Экви-соединение
- •1.5.3.4 Естественное соединение
- •1.5.3.5 Деление
- •1.6 . Примеры использования реляционных операторов
- •1.6.1 Зависимые реляционные операторы
- •1.6.2 Оператор соединения
- •1.6.3 Оператор пересечения
- •1.6.4 Оператор деления
- •1.6.5 Примитивные реляционные операторы
- •1.6.6 Оператор декартового произведения
- •1.6.7 Оператор проекции
- •1.6.8 Оператор выборки
- •1.6.9 Операторы объединения и вычитания
- •1.6.10 Запросы, невыразимые средствами реляционной алгебры
- •1.7 . Выводы
- •2 Нормальные формы отношений
- •2.1 Этапы разработки базы данных
- •2.2 . Критерии оценки качества логической модели данных
- •2.2.1 Адекватность базы данных предметной области
- •2.2.2 Легкость разработки и сопровождения базы данных
- •2.2.4 Скорость операций выборки данных
- •2.3 . Основной пример
- •2.3.1 . 1НФ (Первая Нормальная Форма)
- •2.3.1.1 Аномалии обновления
- •2.3.1.2 Аномалии вставки (INSERT)
- •2.3.1.3 Аномалии обновления (UPDATE)
- •2.3.1.4 Аномалии удаления (DELETE)
- •2.4 . Функциональные зависимости
- •2.4.1 Определение функциональной зависимости
- •2.4.2 Функциональные зависимости отношений и математическое понятие функциональной зависимости
- •2.4.3 2НФ (Вторая Нормальная Форма)
- •2.5 . Анализ декомпозированных отношений
- •2.5.1 Оставшиеся аномалии вставки (INSERT)
- •2.5.2 Оставшиеся аномалии обновления (UPDATE)
- •2.5.3 Оставшиеся аномалии удаления (DELETE)
- •2.5.4 3НФ (Третья Нормальная Форма)
- •2.6 . Алгоритм нормализации (приведение к 3НФ)
- •2.7 . Анализ критериев для нормализованных и ненормализованных моделей данных
- •2.7.1 Сравнение нормализованных и ненормализованных моделей
- •2.9 . Выводы
- •3 . Нормальные формы более высоких порядков
- •3.2 . 4НФ (Четвертая Нормальная Форма)
- •3.3 . 5НФ (Пятая Нормальная Форма)
- •3.4 . Продолжение алгоритма нормализации (приведение к 5НФ)
- •3.5 . Выводы
- •4 . ПОДЪЯЗЫК ДАННЫХ, ОСНОВАННЫЙ НА РЕЛЯЦИОННОЙ АЛГЕБРЕ
- •4.1 1. Введение
- •4.2 . Традиционный набор операций
- •4.2.1 Специальные операции над отношениями
- •4.2.2 4. Примеры выборки
- •4.2.3 Примеры операций запоминания
- •4.2.4 Заключение
- •5 . ПОДЪЯЗЫК ДАННЫХ, ОСНОВАННЫЙ НА РЕЛЯЦИОННОМ ИСЧИСЛЕНИИ
- •5.1 . Введение
- •5.2 . Допущения и определения
- •5.3 . Операции выборки
- •5.4 . Операции запоминания
- •5.5 . Библиотечные функции
- •5.6 . Заключение
- •6 . Query-by-Example: язык запросов по образцу
- •6.1 . Выборка
- •6.2 . Вставки, удаления, модификации
- •6.3 . Создание таблицы
- •6.4 . Заключение
- •6.5 . Приложение
- •7 . Элементы языка SQL
- •7.1 . Операторы SQL
- •Операторы защиты и управления данными
- •7.2 . Примеры использования операторов манипулирования данными
- •INSERT - вставка строк в таблицу
- •UPDATE - обновление строк в таблице
- •DELETE - удаление строк в таблице
- •7.3 . Примеры использования оператора SELECT
- •7.3.1 Отбор данных из одной таблицы
- •7.3.2 Отбор данных из нескольких таблиц
- •7.3.3 Использование имен корреляции (алиасов, псевдонимов)
- •7.3.4 Использование агрегатных функций в запросах
- •7.3.5 Использование агрегатных функций с группировками
- •7.3.6 Использование подзапросов
- •7.3.7 Использование объединения, пересечения и разности
- •7.3.9 Синтаксис оператора выборки
- •7.3.10 . Синтаксис соединенных таблиц
- •7.3.11 . Синтаксис условных выражений раздела WHERE
- •7.4 . Порядок выполнения оператора SELECT
- •7.4.1 Стадия 1. Выполнение одиночного оператора SELECT
- •7.4.2 Стадия 2. Выполнение операций UNION, EXCEPT, INTERSECT
- •7.4.3 Стадия 3. Упорядочение результата
- •7.5 . Как на самом деле выполняется оператор SELECT
- •7.6 . Реализация реляционной алгебры средствами оператора SELECT (Реляционная полнота SQL)
- •7.6.1 Оператор декартового произведения
- •7.6.2 Оператор проекции
- •7.6.3 Оператор выборки
- •7.6.4 Оператор объединения
- •7.6.5 Оператор вычитания
- •7.6.6 Оператор соединения
- •7.6.7 Оператор пересечения
- •7.6.8 Оператор деления
- •7.7 . Выводы
- •8 . Транзакции и целостность баз данных
- •8.1 . Пример нарушения целостности базы
- •8.2 . Понятие транзакции
- •8.2.1 Ограничения целостности
- •8.2.2 Классификация ограничений целостности
- •8.2.2.1 Классификация ограничений целостности по способам реализации
- •8.2.2.2 Классификация ограничений целостности по времени проверки
- •8.2.2.3 Классификация ограничений целостности по области действия
- •8.2.2.3.1 Ограничения домена
- •8.2.2.3.2 Ограничения атрибута
- •8.2.2.3.3 Ограничения кортежа
- •8.2.2.3.4 Ограничения отношения
- •8.2.2.3.5 Ограничения базы данных
- •8.3 . Реализация декларативных ограничений целостности средствами SQL
- •8.3.1 Общие принципы реализации ограничений средствами SQL
- •8.3.2 Синтаксис ограничений стандарта SQL
- •8.3.3 Синтаксис операторов SQL, использующих ограничения
- •8.4 . Выводы
- •9 . Транзакции и параллелизм
- •9.1 . Работа транзакций в смеси
- •9.2 . Проблемы параллельной работы транзакций
- •9.2.1 Проблема потери результатов обновления
- •9.2.3 Проблема несовместимого анализа
- •9.2.3.1 Неповторяемое считывание
- •9.2.3.2 Фиктивные элементы (фантомы)
- •9.2.3.3 Собственно несовместимый анализ
- •9.3 . Конфликты между транзакциями
- •9.4 . Блокировки
- •9.4.1 Решение проблем параллелизма при помощи блокировок
- •9.4.1.1 Проблема потери результатов обновления
- •9.4.1.2 Проблема незафиксированной зависимости (чтение "грязных" данных, неаккуратное считывание)
- •9.4.1.3 Проблема несовместимого анализа
- •9.4.1.3.1 Неповторяемое считывание
- •9.4.1.3.2 Фиктивные элементы (фантомы)
- •9.4.1.3.3 Собственно несовместимый анализ
- •9.5 . Разрешение тупиковых ситуаций
- •9.5.1 Преднамеренные блокировки
- •9.5.3 Метод временных меток
- •9.5.4 Механизм выделения версий данных
- •9.6 . Теорема Есварана о сериализуемости
- •9.7.1 Уровни изоляции
- •9.7.2 Синтаксис операторов SQL, определяющих уровни изоляции
- •9.8 . Выводы
- •10 . Транзакции и восстановление данных
- •10.1.1 Индивидуальный откат транзакции
- •10.1.2 Восстановление после мягкого сбоя
- •10.1.3 Восстановление после жесткого сбоя
- •11 . Представление знаний в интеллектуальных системах
- •11.1 . Введение
- •11.2 . Данные и знания. Основные определения
- •11.3.1 Особенности знаний:
- •11.6.1 Компоненты продукционных систем
- •11.6.2 Классификация ядер продукции.
- •11.6.3 Стратегии решений организации поиска
6
Традиционно, вслед за Коддом, определяют восемь реляционных операторов, объединенных в две группы.
Теоретико-множественные операторы:
•Объединение
•Пересечение
•Вычитание
•Декартово произведение Специальные реляционные операторы:
•Выборка
•Проекция
•Соединение
•Деление
Не все они являются независимыми, т.е. некоторые из этих операторов могут быть выражены через другие реляционные операторы.
1.3. Отношения, совместимые по типу
Некоторые реляционные операторы (например, объединение) требуют, чтобы отношения имели одинаковые заголовки. Действительно, отношения состоят из заголовка и тела. Операция объединения двух отношений есть просто объединение двух множеств кортежей, взятых из тел соответствующих отношений. Но будет ли результат отношением? Во-первых, если исходные отношения имеют разное количество атрибутов, то, очевидно, что множество, являющееся объединением таких разнотипных кортежей нельзя представить в виде отношения. Во-вторых, пусть даже отношения имеют одинаковое количество атрибутов, но атрибуты имеют различные наименования. Как тогда определить заголовок отношения, полученного в результате объединения множеств кортежей? В-третьих, пусть отношения имеют одинаковое количество атрибутов, атрибуты имеют одинаковые наименования, но определенны на различных доменах. Тогда снова объединение кортежей не будет образовывать отношение.
Определение 14.1. Будем называть отношения совместимыми по типу, если они имеют идентичные заголовки, а именно,
•Отношения имеют одно и то же множество имен атрибутов, т.е. для любого атрибута в одном отношении найдется атрибут с таким же наименованием в другом отношении,
•Атрибуты с одинаковыми именами определены на одних и тех же доменах.
Некоторые отношения не являются совместимыми по типу, но становятся таковыми после некоторого переименования атрибутов. Для того, чтобы такие отношения можно было использовать в реляционных операторах, вводится вспомогательный оператор переименования атрибутов.
1.3.1Оператор переименования атрибутов

7
Оператор переименования атрибутов имеет следующий синтаксис:
где - отношение,
- исходные имена атрибутов,
- новые имена атрибутов.
В результате применения оператора переименования атрибутов получаем новое отношение, с измененными именами атрибутов.
Пример 14.1.
Следующий оператор возвращает неименованное отношение, в котором атрибут переименован в
:
1.4. Теоретико-множественные операторы
1.4.1Объединение
Определение 14.2. Объединением двух совместимых по типу отношений и
называется отношение с тем же заголовком, что и у отношений
и
, и телом, состоящим из кортежей, принадлежащих или
, или
, или обоим отношениям.
Синтаксис операции объединения:
Замечание. Объединение, как и любое отношение, не может содержать одинаковых кортежей. Поэтому, если некоторый кортеж входит и в отношение , и отношение
, то в объединение он входит один раз.
Пример 14.2. Пусть даны два отношения |
и с информацией о |
||||||||
сотрудниках: |
|
|
|
|
|
|
|||
|
|
Табельный номер |
Фамилия |
|
|
Зарплата |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
Иванов |
|
|
1000 |
|
|
|
|
2 |
|
Петров |
|
|
2000 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
Сидоров |
|
|
3000 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица |
14.1 Отношение A |
|
|
|
|||
|
|
Табельный номер |
|
Фамилия |
|
Зарплата |
|
||
|
|
|
|
|
|
|
|
||
|
1 |
|
Иванов |
|
1000 |
|
|
||
|
|
|
|
|
|
|
|
||
|
2 |
|
Пушников |
|
2500 |
|
|
||
|
|
|
|
|
|
|
|
||
|
4 |
|
Сидоров |
|
3000 |
|
|
|
Таблица 14.2 Отношение B |
|
||
Объединение отношений и будет иметь вид: |
|
|||
|
Табельный |
Фамилия |
|
Зарплата |
|
номер |
|
|
|

8
1 |
Иванов |
1000 |
2 |
Петров |
2000 |
|
|
|
3 |
Сидоров |
3000 |
2 |
Пушников |
2500 |
|
|
|
4 |
Сидоров |
3000 |
Таблица 14.3 Отношение A UNION B
Замечание. Как видно из приведенного примера, потенциальные ключи, которые были в отношениях и
не наследуются объединением этих отношений. Поэтому, в объединении отношений
и
атрибут "Табельный номер" может содержать дубликаты значений. Если бы это было не так, и ключи наследовались бы, то это противоречило бы понятию объединения как "объединение множеств". Конечно, объединение отношений
и
имеет, как и любое отношение, потенциальный ключ, например, состоящий из всех атрибутов.
1.4.2Пересечение
Определение 14.3. Пересечением двух совместимых по типу отношений и
называется отношение с тем же заголовком, что и у отношений
и
, и телом, состоящим из кортежей, принадлежащих одновременно обоим отношениям
и
.
Синтаксис операции пересечения:
Пример 14.3. Для тех же отношений и
, что и в предыдущем примере пересечение имеет вид:
Табельный номер |
Фамилия |
Зарплата |
|
|
|
1 |
Иванов |
1000 |
|
|
|
Таблица 14.4 Отношение A INTERSECT B
Замечание. Казалось бы, что в отличие от операции объединения, потенциальные ключи могли бы наследоваться пересечением отношений. Однако это не так. Вообще, никакие реляционные операторы не передают результирующему отношению никаких данных о потенциальных ключах. В качестве причины этого можно было бы привести тривиальное соображение, что так получается более просто и симметрично - все операторы устроены одинаково. На самом деле причина более глубока, и заключается в том, что потенциальный ключ - семантическое понятие, отражающее различимость объектов предметной области. Наличие потенциальных ключей не выводится из структуры отношения, а явно задается для каждого отношения, исходя из его смысла. Реляционные же операторы являются формальными операциями над отношениями и выполняются одинаково, независимо от смысла данных, содержащихся в отношениях. Поэтому, реляционные операторы ничего не

9
могут "знать" о смысле данных. Трактовка результата реляционных операций - дело пользователя.
1.4.3Вычитание
Определение 14.4. Вычитанием двух совместимых по типу отношений и
называется отношение с тем же заголовком, что и у отношений
и
, и телом, состоящим из кортежей, принадлежащих отношению
и не принадлежащих отношению
.
Синтаксис операции вычитания:
Пример 14.4. Для тех же отношений и
, что и в предыдущем примере вычитание имеет вид:
Табельный номер |
Фамилия |
Зарплата |
|
|
|
2 |
Петров |
2000 |
3 |
Сидоров |
3000 |
|
|
|
Таблица 14.5 Отношение A MINUS B
1.4.4Декартово произведение
Определение 14.5. Декартовым произведением двух отношений
и
называется отношение, заголовок которого является сцеплением заголовков отношений
и
:
,
а тело состоит из кортежей, являющихся сцеплением кортежей отношений и
:
,
таких, что ,
. Синтаксис операции декартового произведения:
Замечание. Мощность произведения равна произведению мощностей отношений
и
, т.к. каждый кортеж отношения
соединяется с каждым кортежем отношения
.
Замечание. Если в отношения и
имеются атрибуты с одинаковыми наименованиями, то перед выполнением операции декартового произведения такие атрибуты необходимо переименовать.
Замечание. Перемножать можно любые два отношения, совместимость по типу при этом не требуется.
Пример 14.5. Пусть даны два отношения и
с информацией о поставщиках и деталях:
Номер поставщика |
Наименование поставщика |
|
|
1 |
Иванов |