- •Установочный модуль
- •Введение
- •Модуль 1
- •Реляционная алгебра
- •Отсутствующие данные
- •Пустые значения
- •Неопределенные значения
- •Интерпретации
- •Правила вычисления выражений
- •Следствия
- •Проверка условий
- •Реляционные объекты данных
- •Формальные определения
- •Домены и атрибуты
- •Схема отношения
- •Именованное значение атрибута
- •Кортеж
- •Отношение
- •Схема базы данных
- •База данных
- •Операции реляционной алгебры
- •Унарные операции
- •Бинарные операции
- •Варианты операции соединения
- •Производные операции
- •Пример построения выражения реляционной алгебры
- •Понятие базовых и виртуальных отношений
- •Понятие полноты реляционной алгебры
- •Формирование запросов на языке SQL
- •Металингвистические символы
- •Реализация операций реляционной алгебры
- •Пример использования подзапросов
- •Группирующие запросы
- •Упорядочение результатов
- •Вопросы для самоконтроля
- •Упражнения
- •Построение выражений реляционной алгебры
- •Модуль 2
- •Базовые и виртуальные отношения
- •Типы данных
- •Базовые типы данных
- •Типы данных, определяемые пользователем
- •Первичные и кандидатные ключи
- •Создание базовых отношений
- •Индексы
- •Модификация базовых отношений
- •Вставка строк
- •Обновление строк
- •Удаление строк
- •Целостность
- •Декларативная поддержка
- •Пример декларативной поддержки целостности
- •Транзакции и блокировки
- •Триггеры
- •Виртуальные отношения
- •Вопросы для самоконтроля
- •Упражнения
- •Декларативная поддержка целостности
- •Модуль 3
- •Нормальные формы
- •Функциональные зависимости (ФЗ)
- •Правила вывода Армстронга
- •Производные правила вывода
- •Независимость правил Армстронга
- •Полнота системы правил Армстронга
- •Нормальные формы
- •Первая нормальная форма (1NF)
- •Вторая нормальная форма (2NF)
- •Третья нормальная форма (3NF)
- •Нормальная форма Бойса-Кодда (Boyce, Codd; NFBC)
- •Пример построения нормализованных схем отношений
- •Вопросы для самоконтроля
- •Модуль 4
- •Проектирование схем баз данных
- •Уровни логической модели
- •Миграция ключей и виды связей
- •Классификация кластеров
- •Иерархическая рекурсия
- •Абстрактная схема
- •Обобщения
- •Пример реализации иерархической рекурсии
- •Сетевая рекурсия
- •Абстрактная схема
- •Сетевая реализация иерархической рекурсии
- •Обобщения
- •Пример реализации сетевой рекурсии
- •Ассоциация
- •Детализация связей многие-ко-многим
- •Обобщения
- •Пример реализации ассоциации
- •Обобщение
- •Абстрактная схема
- •Пример реализации обобщения
- •Композиция
- •Абстрактная схема
- •Пример реализации композиции
- •Агрегация
- •Абстрактная схема
- •Пример реализации агрегации
- •Унификация атрибутов
- •Вопросы для самоконтроля
- •Упражнения
- •Иерархическая рекурсия
- •Сетевая рекурсия
- •Ассоциация
- •Обобщение
- •Композиция
- •Агрегация
- •Дополнительные главы
- •Технологии баз данных
- •Информационные системы
- •Жизненный цикл ИС
- •СУБД и БД
- •Жизненный цикл БД и средства проектирования
- •Модели данных
- •Иерархическая модель данных
- •Сетевая модель данных
- •Реляционная модель данных
- •Постреляционная модель данных
- •Объектно-ориентированные модели данных
- •XML как модель данных
- •Многомерная модель данных (OLAP)
- •Основные функции СУБД
- •Управление данными во внешней памяти
- •Управление буферами оперативной памяти
- •Управление транзакциями
- •Журнализация и восстановление БД после сбоев
- •Поддержка языков баз данных
- •Типовая организация СУБД
- •Модели взаимодействия с БД
- •Модель с централизованной архитектурой
- •Модель с автономными персональными компьютерами
- •Архитектура «файл-сервер»
- •Архитектура «клиент-сервер»
- •Архитектура «клиент-сервер» трехзвенная
- •Распределенные базы данных
- •Технология тиражирования данных
- •Понятие «фрактал»
- •Геометрические фракталы
- •Алгебраические фракталы
- •Стохастические фракталы
- •Системы итерируемых функций
- •Вопросы для самоконтроля
- •Литература
- •Список иллюстраций
- •Список таблиц
5.5.2. Сетевая реализация иерархической рекурсии
Сеть (граф) есть обобщение понятия иерархии (дерева). Но как это реализовать? Надо сделать так, чтобы в сетевой рекурсии из каждого узла могло выходить не более одной дуги. Это означает, что в классе Дуги значения атрибута КодУ-Из должны быть уникальными. Следовательно, атрибут КодУИз должен быть объявлен ключом. Для этого следует сменить статус атрибута КодУ-На с PF на FK и при этом наследовать запрет null-значений (рис. 5.14).
Рис. 5.14.: Сетевая реализация иерархической рекурсии. Абстрактная ключевая диаграмма
Примечание. Здесь тип связи по атрибуту КодУ-Из (рис. 5.12) заменился на один-к-не-более-один (1 : 0 : : : 1)
Здесь между классами Узлы и Дуги устанавливаются полностью идентифицирующая и обязательная неидентифицирующая связи.
Данный вариант реализации иерархической рекурсии отличается от ранее рассмотренного варианта «УзловИерархия» тем, что теперь дуги вынесены в отдельный класс сущностей и класс сущностей Узлы не смешен с понятием их иерархии. Это может быть полезным на практике в случае, когда в проектируемой схеме базы данных дуги выступают в качестве самостоятельных сущностей.
5.5.3. Обобщения
Что делать, если допускаются кратные дуги, то есть речь идет не о графе, а о мультиграфе? Достаточно в класс Дуги включить дополнительный атрибут Кратность.
Что делать, если граф взвешенный, то есть каждой дуге сопоставлены некоторые атрибуты? Включить их в число атрибутов класса Дуги.
Выше даже в случае рассмотрения мультиграфа речь шла, по-существу, о том, что узлы связываются не более чем одной дугой, на которую «навешиваются» атрибуты, в частности, кратность.
Примечание. В классе Дуги ключом является пара ссылок на узлы, и, следовательно, эта пара (дуга) не может дублироваться
Что делать, если каждая из кратных дуг мультиграфа должна характеризоваться своим набором значений атрибутов? Следует ввести «индивидуальность» дуги, соединяющей узлы. Например, данные об авиарейсах из пункта A в пункт B могут характеризоваться временем отправления, временем прибытия, количеством посадочных мест и т.д. В данном случае индивидуальность дуги – это номер рейса из пункта A в пункт B, и его следует включить в состав атрибутов первичного ключа:
Пункты(КодП, Название) primary key(КодП)
Рейсы(КодП-Из, КодП-На, № рейса, ВремяОтпр, ВремяПриб, Мест)
primary key(КодП-Из, КодП-На, № рейса) foreign key(КодП-Из) references Пункты(КодП) foreign key(КодП-На) references Пункты(КодП)
Если атрибут № рейса не включить в состав первичного ключа, то число возможных рейсов из одного пункта в другой будет не более одного.
Как и иерархическая, сетевая рекурсия допускает многочисленные обобщения.
Основная идея реализации сети и ее обобщений в реляционной модели проста: создание класса ассоциативных сущностей, описывающего связи элементов сети.
5.5.4. Пример реализации сетевой рекурсии
Практическое задание. Построить реляционную модель, описывающую сетевую взаимосвязь документов по ссылкам. При этом
1)Построить презентационную диаграмму. Указать кратности и наименование связи.
2)Построить ключевую диаграмму. Привести маркеры атрибутов ключей и указать кратности связей. Документы идентифицировать мнемокодами (обновление мнемокода является осмысленным).
3)Сформулировать и записать на псевдокоде декларативные правила поддержания ссылочной целостности. Обосновать на содержательном уровне выбор правил.
4)Привести пример в табличной форме для следующего случая перекрестных ссылок документов 1-4: 1(3,4), 2(1), 4(1,2,3).
Решение. Презентационная и ключевая диаграммы представлены на рис. 5.15, 5.16 соответственно.
Рис. 5.15.: Сетевая рекурсия. Презентационная диаграмма (см. 5.5.4)
Рис. 5.16.: Сетевая рекурсия. Ключевая диаграмма (см. 5.5.4)
Приведем фрагмент оператора создания базового отношения Ссылки с определением правил поддержания ссылочной целостности:
create table Ссылки
primary key(МнемоД-Из, МнемоД-На)
foreign key(МнемоД-Из) references Документы(МнемоД) on update cascade
on delete cascade
foreign key(МнемоД-На) references Документы(МнемоД) on update cascade
on delete restrict
При обновлении мнемокода документа (МнемоД) здесь применяются правила каскадного обновления (on update cascade), так что все ссылки (МнемоД-Из и МнемоД-На) станут ссылаться на это новое значение мнемокода. В рассматриваемом ниже примере при изменении значения первичного ключа (МнемоД) 4 на 40 значения внешних ключей (МнемоД-Из и МнемоД-На) также изменятся с 4 на 40.
При удалении документа (МнемоД) применение правила каскадного удаления (on delete cascade) для документа, из которого производится ссылка (МнемоД-Из), приведет к тому, что все ссылки из этого документа также удалятся (если это не будет противоречить описываемому ниже правилу on delete restrict).
При удалении документа (МнемоД) применение правила ограничения (on delete restrict) для документа, на который производится ссылка, приведет к тому, что документ не будет удален, если на него имеются ссылки из каких-либо документов.
Пример в табличной форме для перекрестных ссылок документов 1-4 (1(3,4), 2(1), 4(1,2,3)) при-