- •Установочный модуль
- •Введение
- •Модуль 1
- •Реляционная алгебра
- •Отсутствующие данные
- •Пустые значения
- •Неопределенные значения
- •Интерпретации
- •Правила вычисления выражений
- •Следствия
- •Проверка условий
- •Реляционные объекты данных
- •Формальные определения
- •Домены и атрибуты
- •Схема отношения
- •Именованное значение атрибута
- •Кортеж
- •Отношение
- •Схема базы данных
- •База данных
- •Операции реляционной алгебры
- •Унарные операции
- •Бинарные операции
- •Варианты операции соединения
- •Производные операции
- •Пример построения выражения реляционной алгебры
- •Понятие базовых и виртуальных отношений
- •Понятие полноты реляционной алгебры
- •Формирование запросов на языке SQL
- •Металингвистические символы
- •Реализация операций реляционной алгебры
- •Пример использования подзапросов
- •Группирующие запросы
- •Упорядочение результатов
- •Вопросы для самоконтроля
- •Упражнения
- •Построение выражений реляционной алгебры
- •Модуль 2
- •Базовые и виртуальные отношения
- •Типы данных
- •Базовые типы данных
- •Типы данных, определяемые пользователем
- •Первичные и кандидатные ключи
- •Создание базовых отношений
- •Индексы
- •Модификация базовых отношений
- •Вставка строк
- •Обновление строк
- •Удаление строк
- •Целостность
- •Декларативная поддержка
- •Пример декларативной поддержки целостности
- •Транзакции и блокировки
- •Триггеры
- •Виртуальные отношения
- •Вопросы для самоконтроля
- •Упражнения
- •Декларативная поддержка целостности
- •Модуль 3
- •Нормальные формы
- •Функциональные зависимости (ФЗ)
- •Правила вывода Армстронга
- •Производные правила вывода
- •Независимость правил Армстронга
- •Полнота системы правил Армстронга
- •Нормальные формы
- •Первая нормальная форма (1NF)
- •Вторая нормальная форма (2NF)
- •Третья нормальная форма (3NF)
- •Нормальная форма Бойса-Кодда (Boyce, Codd; NFBC)
- •Пример построения нормализованных схем отношений
- •Вопросы для самоконтроля
- •Модуль 4
- •Проектирование схем баз данных
- •Уровни логической модели
- •Миграция ключей и виды связей
- •Классификация кластеров
- •Иерархическая рекурсия
- •Абстрактная схема
- •Обобщения
- •Пример реализации иерархической рекурсии
- •Сетевая рекурсия
- •Абстрактная схема
- •Сетевая реализация иерархической рекурсии
- •Обобщения
- •Пример реализации сетевой рекурсии
- •Ассоциация
- •Детализация связей многие-ко-многим
- •Обобщения
- •Пример реализации ассоциации
- •Обобщение
- •Абстрактная схема
- •Пример реализации обобщения
- •Композиция
- •Абстрактная схема
- •Пример реализации композиции
- •Агрегация
- •Абстрактная схема
- •Пример реализации агрегации
- •Унификация атрибутов
- •Вопросы для самоконтроля
- •Упражнения
- •Иерархическая рекурсия
- •Сетевая рекурсия
- •Ассоциация
- •Обобщение
- •Композиция
- •Агрегация
- •Дополнительные главы
- •Технологии баз данных
- •Информационные системы
- •Жизненный цикл ИС
- •СУБД и БД
- •Жизненный цикл БД и средства проектирования
- •Модели данных
- •Иерархическая модель данных
- •Сетевая модель данных
- •Реляционная модель данных
- •Постреляционная модель данных
- •Объектно-ориентированные модели данных
- •XML как модель данных
- •Многомерная модель данных (OLAP)
- •Основные функции СУБД
- •Управление данными во внешней памяти
- •Управление буферами оперативной памяти
- •Управление транзакциями
- •Журнализация и восстановление БД после сбоев
- •Поддержка языков баз данных
- •Типовая организация СУБД
- •Модели взаимодействия с БД
- •Модель с централизованной архитектурой
- •Модель с автономными персональными компьютерами
- •Архитектура «файл-сервер»
- •Архитектура «клиент-сервер»
- •Архитектура «клиент-сервер» трехзвенная
- •Распределенные базы данных
- •Технология тиражирования данных
- •Понятие «фрактал»
- •Геометрические фракталы
- •Алгебраические фракталы
- •Стохастические фракталы
- •Системы итерируемых функций
- •Вопросы для самоконтроля
- •Литература
- •Список иллюстраций
- •Список таблиц
произведению номеров аудиторий. Поэтому для подобных атрибутов следует выбирать строковый тип данных (даже если нумерация числовая, а не буквенно-числовая)
5.9. Агрегация
5.9.1. Абстрактная схема
Агрегация реализуется как взаимосвязь одного родительского с несколькими дочерними классами, описываемая связями, необязательными на родительском конце. Это означает, что дочерние сущности (компоненты) могут существовать вне родительской сущности (агрегата).
Необязательными на родительском конце являются связи единственного вида – необязательные неидентифицирующие. Следовательно, компоненты агрегата, ссылающиеся на агрегат посредством внешнего ключа, допускающего null-значения, существуют вне агрегата в случае, когда внешний ключ имеет null-значение.
На презентационных диаграммах связь «агрегат-компонент» удобно изображать в нотации UML (рис. 5.36).
Рис. 5.36.: Связь «агрегат-компонент» в нотации UML
Построим абстрактные диаграммы (рис. 5.37, 5.38), реализующие агрегацию в реляционной модели.
Рис. 5.37.: Агрегация. Абстрактная презентационная диаграмма
Примечание. Например, для двери, как агрегата, видами компонентов могут быть дверное полотно, ручка, петли. Стрелки, как и в случаях обобщения и композиции, можно и не сливать
5.9.2. Пример реализации агрегации
Практическое задание. Построить реляционную модель, описывающую маркированные компоненты автомобиля (двигатель, шасси). При этом
1)Построить презентационную диаграмму.
2)Построить ключевую диаграмму. Привести маркеры атрибутов ключей и указать кратности связей. Списывание автомобиля предполагает списывание шасси, но не двигателя. Какие виды связей используются?
3)Сформулировать и записать на псевдокоде декларативные правила поддержания ссылочной целостности. Обосновать на содержательном уровне выбор правил.
Рис. 5.38.: Агрегация. Абстрактная ключевая диаграмма
Решение. Данный пример представляет агрегацию общего вида, когда часть компонентов могут, а часть не могут существовать вне агрегата. Согласно презентационной диаграмме (рис. 5.39) предполагается, что разукомплектованный автомобиль может и не иметь шасси, но если шасси в комплектацию входит, то оно одно. Число двигателей, приписанных автомобилю (с учетом запасных), не ограничивается. Чтобы подчеркнуть это, на презентационной диаграмме явно указывается соответствующая кратность.
Рис. 5.39.: Агрегация. Презентационная диаграмма (см. 5.9.2)
Ключевая диаграмма представлена на рис. 5.40.
Здесь в секцию атрибутов класса Двигатели введен виртуальный атрибут, формула вычисления которого указана в секции ограничений.
В классе Шасси внешний ключ, ссылающийся на номер автомобиля, объявлен кандидатным ключом. В результате тип устанавливаемой обязательной неидентифицирующей связи изменяется с один-ко-многим (1 : 0 : : : 1) на один-к-не-более-одному (1 : 0 : : : 1). Такой вариант установления связей часто полезен на практике.
Таким образом, связь с классом Двигатели является необязательной неидентифицирующей, а с классом Шасси – обязательной неидентифицирующей. Однако в последнем случае вследствие
Рис. 5.40.: Агрегация. Ключевая диаграмма (см. 5.9.2)
объявления внешнего ключа и в качестве кандидатного устанавливается требуемая связь типа 1 : 0 : : : 1.
Приведем фрагменты операторов создания базовых отношений Двигатели и Шасси с определением правил поддержания ссылочной целостности:
create table Двигатели [№ А] null
primary key(МаркерД)
foreign key(№ А) references Автомобили(№ А) on update cascade
on delete set null
create table Шасси [№ А] not null primary key(МаркерШ) candidate key(№ А)
foreign key(№ А) references Автомобили(№ А) on update cascade
on delete cascade
Примечание. Здесь квадратные скобки, в которые должен быть заключен идентификатор № А, опускаются в случаях, исключающих двусмысленность
Согласно сформулированным правилам поддержания ссылочной целостности при изменении номера автомобиля проводится каскадное изменение и ссылок на него. При удалении данных об автомобиле разрывается связь с данными о двигателях, и удаляются данные о шасси.