
- •Установочный модуль
- •Введение
- •Модуль 1
- •Реляционная алгебра
- •Отсутствующие данные
- •Пустые значения
- •Неопределенные значения
- •Интерпретации
- •Правила вычисления выражений
- •Следствия
- •Проверка условий
- •Реляционные объекты данных
- •Формальные определения
- •Домены и атрибуты
- •Схема отношения
- •Именованное значение атрибута
- •Кортеж
- •Отношение
- •Схема базы данных
- •База данных
- •Операции реляционной алгебры
- •Унарные операции
- •Бинарные операции
- •Варианты операции соединения
- •Производные операции
- •Пример построения выражения реляционной алгебры
- •Понятие базовых и виртуальных отношений
- •Понятие полноты реляционной алгебры
- •Формирование запросов на языке SQL
- •Металингвистические символы
- •Реализация операций реляционной алгебры
- •Пример использования подзапросов
- •Группирующие запросы
- •Упорядочение результатов
- •Вопросы для самоконтроля
- •Упражнения
- •Построение выражений реляционной алгебры
- •Модуль 2
- •Базовые и виртуальные отношения
- •Типы данных
- •Базовые типы данных
- •Типы данных, определяемые пользователем
- •Первичные и кандидатные ключи
- •Создание базовых отношений
- •Индексы
- •Модификация базовых отношений
- •Вставка строк
- •Обновление строк
- •Удаление строк
- •Целостность
- •Декларативная поддержка
- •Пример декларативной поддержки целостности
- •Транзакции и блокировки
- •Триггеры
- •Виртуальные отношения
- •Вопросы для самоконтроля
- •Упражнения
- •Декларативная поддержка целостности
- •Модуль 3
- •Нормальные формы
- •Функциональные зависимости (ФЗ)
- •Правила вывода Армстронга
- •Производные правила вывода
- •Независимость правил Армстронга
- •Полнота системы правил Армстронга
- •Нормальные формы
- •Первая нормальная форма (1NF)
- •Вторая нормальная форма (2NF)
- •Третья нормальная форма (3NF)
- •Нормальная форма Бойса-Кодда (Boyce, Codd; NFBC)
- •Пример построения нормализованных схем отношений
- •Вопросы для самоконтроля
- •Модуль 4
- •Проектирование схем баз данных
- •Уровни логической модели
- •Миграция ключей и виды связей
- •Классификация кластеров
- •Иерархическая рекурсия
- •Абстрактная схема
- •Обобщения
- •Пример реализации иерархической рекурсии
- •Сетевая рекурсия
- •Абстрактная схема
- •Сетевая реализация иерархической рекурсии
- •Обобщения
- •Пример реализации сетевой рекурсии
- •Ассоциация
- •Детализация связей многие-ко-многим
- •Обобщения
- •Пример реализации ассоциации
- •Обобщение
- •Абстрактная схема
- •Пример реализации обобщения
- •Композиция
- •Абстрактная схема
- •Пример реализации композиции
- •Агрегация
- •Абстрактная схема
- •Пример реализации агрегации
- •Унификация атрибутов
- •Вопросы для самоконтроля
- •Упражнения
- •Иерархическая рекурсия
- •Сетевая рекурсия
- •Ассоциация
- •Обобщение
- •Композиция
- •Агрегация
- •Дополнительные главы
- •Технологии баз данных
- •Информационные системы
- •Жизненный цикл ИС
- •СУБД и БД
- •Жизненный цикл БД и средства проектирования
- •Модели данных
- •Иерархическая модель данных
- •Сетевая модель данных
- •Реляционная модель данных
- •Постреляционная модель данных
- •Объектно-ориентированные модели данных
- •XML как модель данных
- •Многомерная модель данных (OLAP)
- •Основные функции СУБД
- •Управление данными во внешней памяти
- •Управление буферами оперативной памяти
- •Управление транзакциями
- •Журнализация и восстановление БД после сбоев
- •Поддержка языков баз данных
- •Типовая организация СУБД
- •Модели взаимодействия с БД
- •Модель с централизованной архитектурой
- •Модель с автономными персональными компьютерами
- •Архитектура «файл-сервер»
- •Архитектура «клиент-сервер»
- •Архитектура «клиент-сервер» трехзвенная
- •Распределенные базы данных
- •Технология тиражирования данных
- •Понятие «фрактал»
- •Геометрические фракталы
- •Алгебраические фракталы
- •Стохастические фракталы
- •Системы итерируемых функций
- •Вопросы для самоконтроля
- •Литература
- •Список иллюстраций
- •Список таблиц

Группа 2. Несколько родительских классов сущностей и один дочерний класс. Связи между классами могут быть произвольного вида. Такие кластеры приводят в реляционной модели к понятию ассоциации (дочерний класс ассоциирует, объединяет, родительские классы).
Группа 3. Один родительский и несколько дочерних классов. В зависимости от вида устанавливаемых между классами связей получим следующую классификацию кластеров:
1)обобщение – связи категориальные (полностью идентифицирующие);
2)композиция – связи обязательные на родительском конце связи;
3)агрегация – связи необязательные на родительском конце связи.
Примечание. Часто композиция называется композитной агрегацией и рассматривается как усиленная форма агрегации общего вида
Введение этих кластеров не означает, что разрабатываемый проект схемы базы данных должен обязательно описываться одним из них. Большие проекты включают разнообразные комбинации кластеров.
5.4. Иерархическая рекурсия
5.4.1. Абстрактная схема
Связь класса сущностей с самим собой называется рекурсивной (иногда такую связь называют «рыболовным крючком»). Рекурсивная связь типа не-более-один-ко-многим (0 : : : 1 : 0 : : : 1) называется
иерархической.

Иерархическая рекурсия определяет связь типа предок/потомок и позволяет хранить древовидную иерархию. В иерархии предок (экземпляр родительского класса сущностей) может иметь много потомков (экземпляров дочернего класса сущностей), но потомок имеет не более одного предка. Узел иерархии может выступать в роли и предка, и потомка. Один из узлов в иерархии предка не имеет (корень).
Виерархической рекурсивной связи один и тот же класс сущностей является и родительским,
идочерним одновременно. При задании иерархической рекурсивной связи первичный ключ должен мигрировать в качестве внешнего в состав неключевых атрибутов того же класса сущностей, то есть такая связь может быть только неидентифицирующей, и, кроме того, необязательной. В противном случае null-значения для внешнего ключа были бы не допустимы, и рекурсия была бы бесконечной.
Атрибуты не могут появляться дважды в одном классе сущностей под одним и тем же именем. Поэтому атрибуты мигрировавшего ключа обязательно должны получить имя роли.
Таким образом, в иерархической рекурсии атрибуты узла расширяются атрибутом (внешним ключом), представляющим необязательную ссылку на первичный ключ узла – непосредственного предка.
Построим абстрактные диаграммы (рис. 5.5, 5.6), реализующие иерархическую рекурсию в реляционной модели, и приведем пример в табличной форме (рис. 5.7).
Рис. 5.5.: Иерархическая рекурсия. Абстрактная презентационная диаграмма

Рис. 5.6.: Иерархическая рекурсия. Абстрактная ключевая диаграмма
Примечание. Здесь под Атрибутами, понятно, подразумеваются собственные атрибуты класса сущностей, не имеющие отношения к ключам (ключи – это тоже атрибуты)
Рис. 5.7.: Иерархическая рекурсия. Пример в табличной форме (см. рис. 5.6)

Как прийти к подобным построениям? Пусть есть некоторое множество узлов, определяемых кодом узла КодУ и некоторыми атрибутами:
Узлы(КодУ, Атрибуты) primary key(КодУ)
Подчеркнем, что пока это множество узлов, а не их иерархия. Каждый узел в иерархии имеет не более одного предка (корень предка не имеет). Поэтому достаточно просто ввести дополнительный атрибут, допускающий null-значения и ссылающийся на этого предка:
УзловИерархия(КодУ-Предок: null, КодУ, Атрибуты) primary key(КодУ)
foreign key(КодУ-Предок) references УзловИерархия(КодУ)
5.4.2. Обобщения
Может ли данная схема иерархической рекурсии описывать не одну иерархию, а несколько однотипных иерархий (то есть не дерево, а лес)? Да, так как число корневых узлов в схеме хранения данных может быть произвольным. Число хранимых деревьев – это число null-значений, появляющихся в значениях внешнего ключа КодУ-Предок.
Что делать, если дерево взвешенное, то есть каждой дуге сопоставлены некоторые атрибуты? Включить их в число атрибутов класса УзловИерархия и разрешить принимать им null-значения, так как для корневых узлов значения этих атрибутов не определены.