
- •Содержание
- •Глава 1. Основные понятия 6
- •Глава 2. Модели данных 19
- •Глава 3. Функциональные зависимости 46
- •Глава 4. Нормализация 54
- •Глава 5. Методология концептуального проектирования 69
- •Глава 6. Методология логического проектирования баз данных реляционного типа 75
- •Глава 7. Методология физического проектирования реляционных бд 93
- •Глава 8. Язык структурированных запросов sql. 107
- •Предисловие
- •Глава 1. Основные понятия
- •1.1. Информационные системы с базами данных.
- •1.2. Функции и возможности субд
- •1.3. Программные компоненты субд
- •1.4. Архитектура среды базы данных
- •1.5. Реляционные объекты данных: терминология
- •1.6. Формальные определения
- •1.6.1. Домены
- •1.6.2. Отношения
- •1.7. Целостность реляционных данных
- •1.7.1. Потенциальные ключи
- •1. Свойством уникальности.
- •2. Свойством не избыточности.
- •1.7.2. Первичные и альтернативные ключи
- •1.7.3. Внешние ключи
- •1.7.4. Ссылочная целостность
- •1.7.5. Правила внешних ключей
- •Глава 2. Модели данных
- •2.1. Элементы er-модели
- •2.1.1. Множество сущностей
- •2.1.2. Атрибуты
- •2.1.3. Связи
- •2.1.4. Рекурсивная связь
- •2.1.5. Атрибуты связей
- •2.2. Структурные ограничения
- •2.2.1. Связь "один-к-одному"
- •2.2.2. Связь "один-ко-многим"
- •2.2.3. Связь "многие-ко-многим"
- •2.2.4. Степень участия
- •2.2.5. Многосторонние связи
- •2.2.6. Слабые множества сущностей
- •2.3. Проблемы er-моделирования (Материал данного параграфа не обязателен для изучения)
- •2.3.1. Ловушки разветвления
- •2.3.2. Ловушка разрыва
- •2.4. Ееr-модель
- •2.4.1. Суперклассы и подклассы типов сущностей
- •2.4.2. Наследование атрибутов
- •2.4.3. Специализация
- •2.4.4. Генерализация
- •2.4.5. Ограничения, накладываемые на процедуры специализации и генерализации
- •2.4.6. Категоризация
- •2.5. Реляционные модели
- •2.5.1. От er-диаграмм к реляционным схемам
- •2.5.2. От er-связей к к отношениям
- •2.5.3. Объединение отношения
- •2.5.4. Преобразование слабых множеств сущностей
- •Глава 3. Функциональные зависимости
- •3.1.Основные определения
- •3.2. Тривиальные и нетривиальные зависимости
- •3.3. Замыкание множества зависимостей
- •3.4. Правила вывода Армстронга
- •3.5. Неприводимое множество зависимостей
- •Примеры
- •Глава 4. Нормализация
- •4.1. Декомпозиция без потерь
- •4.2. Первая, вторая и третья нормальные формы.
- •Вторая нормальная форма (2нф).
- •Третья нормальная форма ( 3нф ).
- •Нормальная форма Бойса-Кодда
- •4.3. Многозначные зависимости
- •4.4. Четвертая нормальная форма (4нф)
- •4.5. Пятая нормальная форма (5нф)
- •4.6. Итоговая схема процедуры нормализации
- •4.7. Альтернативный набор определений нфбк, 4нф и 5нф
- •4.8. Выделим цели процесса нормализации
- •4.9. Другие нормальные формы
- •Глава 5. Методология концептуального проектирования
- •5.1. Источники представления пользователей о предметной области
- •5.2. Определение типов сущностей
- •5.3. Определение типов связей
- •5.4. Определение атрибутов
- •5.5. Определение доменов атрибутов
- •5.6. Определение потенциальных и первичных ключей
- •5.7. Генерализация и специализация типов сущностей
- •5.8. Создание диаграммы "сущность-связь"
- •5.9. Обсуждение локальных концептуальных моделей данных с конечными пользователями
- •Глава 6. Методология логического проектирования баз данных реляционного типа
- •6.1. Преобразование локальной концептуальной модели данных в локальную логическую модель
- •6.1.1. Удаление связей типа m:n
- •6.1.2. Удаление сложных связей
- •6.1.3. Удаление рекурсивных связей
- •6.1.4. Удаление связей с атрибутами
- •6.1.5. Удаление множественных атрибутов
- •6.1.6. Перепроверка связей типа 1:1
- •6.1.7. Удаление избыточных связей
- •6.2. Наборы отношений локальных логических моделей данных
- •6.2.1. Сильные типы сущностей
- •6.2.2. Слабые типы сущностей
- •6.2.3. Бинарные связи типа "один-к-одному" (1:1)
- •6.2.4. Бинарные связи типа "один-ко-многим" (1:м)
- •6.2.5. Связи типа "суперкласс/подкласс"
- •6.2.6. Документирование созданных отношений и атрибутов внешних ключей
- •6.3. Проверка модели с помощью правил нормализации
- •6.4. Проверка модели в отношении транзакций
- •6.5. Создание диаграмм "сущность-связь"
- •6.7.1. Слияние локальных логических моделей данных в единую глобальную модель данных
- •6.7.1.1. Анализ имен сущностей и их первичных ключей
- •6.7.1.2. Анализ имен связей
- •2. Слияние эквивалентных сущностей с различными первичными ключами
- •3. Слияние сущностей с различными именами, имеющих одинаковые или различные первичные ключи
- •7.1.1. Oписание на языке sql стандарта iso 1992 (sql2)
- •Листинг 1. Операторы языка sql, предназначенные для создания таблицы
- •7.1.2. Реализация с использованием триггеров
- •Пример 1
- •7.1.3. Реализация с использованием уникальных индексов
- •Пример 2
- •7.2. Реализация бизнес-правил предприятия в среде целевой субд
- •7.3. Организация эффективного хранения данных
- •7.3.1. Анализ транзакций.
- •7.3.2. Выбор файловой структуры.
- •Последовательные файлы
- •Хешированные файлы
- •Индексно-последовательные файлы
- •Двоичные деревья
- •7.3.3. Определение вторичных индексов.
- •7.3.4. Анализ необходимости введения контролируемой избыточности.
- •7.3.5. Определение требований к дисковой памяти.
- •Последовательные файлы
- •Хешированные файлы
- •7.4. Разработка механизмов защиты
- •7.4.1. Разработка пользовательских представлений (видов).
- •7.4.2. Определение прав доступа.
- •7.5. Организация мониторинга и настройка функционирования системы
- •Глава 8. Язык структурированных запросов sql.
- •Операторы ddl
- •Типы данных
- •Создание файла бд
- •Создание (определение) таблиц
- •Определение столбцов
- •Примеры создания таблиц
- •Удаление таблиц
- •Модификация структуры таблиц
- •Операторы, изменяющие информацию в бд
- •Добавление новых данных.
- •Удаление существующих данных.
- •Обновление существующих данных.
- •Запрос информации из бд
- •Инструкция select
- •Предложение select.
- •Предложение from.
- •Запросы
- •Порядок выполнения многотабличных запросов
- •Виды объединений
- •Предложение where.
- •Условия отбора
- •Составные или сложные условия отбора
- •Предложение group by.
- •Предложение having.
- •Предложение order by.
- •Применение оператора select в инструкции insert
2.2.3. Связь "многие-ко-многим"
Если связь R ни в одном из направлений -- ни от E к F, ни от F к Е -- не относится к типу "один-ко-многим", то имеет место связь типа "многие-ко-многим".
Рассмотрим пример, в котором между двумя сущностями Газета и Недвижимость_в_аренду установлена связь Рекламирует. На Рис.2.2.5. представлена семантическая сетевая модель этой связи.
Рис. 2.2.5. Семантическая модель связи Рекламирует между сущностями Газета и
Недвижимость_в_ аренду.
Связь Рекламирует является связью типа 1:М как со стороны сущности Газета, так и стороны сущности Недвижимость_в_аренду. Она представлена в виде двух связей типа «один – ко – многим» (1:М), которые вместе образуют связь типа «многие-ко-многим» (M:N).
ER-диаграмма связи Рекламирует между сущностями Газета и Недвижимость_в_аренду представлена на Рис.2.2.6.
Рис. 2.2.6. ER модель связи Рекламирует между сущностями Газета и Недвижимость_в_аренду.
Описанные выше ограничения типа 1:1, 1:М и M:N называют кардинальностью связи.
Существует другой вид ограничения в бинарной связи, называемый степенью участия.
2.2.4. Степень участия
Существует два варианта участия сущности в связи: полное (total) и частичное (partial).
Степень участия является полной, если для существования некоторой сущности требуется существование другой сущности, связанной с ней определенной связью.
В противном случае степень участия является частичной. Например, в случае связи Работает_в между сущностями Отделение и Сотрудник участие сущности Отделение в этой связи является полным, поскольку каждое отделение компании имеет некоторый персонал. Однако, поскольку некоторые работники (например, торговые агенты) не относятся ни к какому конкретному отделению компании, то участие сущности Сотрудник в связи Работает_в является частичным. (Рис.2.2.7)
Рис. 2.2.7. Степень участия сторон в связи Работает_в между сущностями Отделение и Сотрудник.
2.2.5. Многосторонние связи
В некоторых задачах мы сталкиваемся с ситуацией, когда приходится отображать связи, охватывающие более двух множеств сущностей. Такие связи называются многосторонними связями и отображаются на ER-диаграммах линиями, соединяющими ромб связи с каждым прямоугольником множества сущностей. Так, упомянутая нами кинематографическая база данных содержит тернарные связи между тремя множествами сущностей: Актеры, Кинофильмы и Киностудии.
На Рис. 2.2.8. изображена связь Контакты, которая соединяет множества сущностей Киностудии, Актеры и Кинофильмы.
Рис. 2.2.8. Тернарная связь.
Связь Контакты может быть описана множеством кортежей типа:
{Киностудии, Актеры, Кинофильмы}
На Рис. 2.2.8. стрелка направлена к множеству сущностей Киностудии. Это говорит о том, что для каждой пары сущностей Актер и Кинофильм существует только одна студия, с которой это актер заключил контракт на участие в съемках определенного кинофильма. Однако стрелки, которые были бы обращены к множествам сущностей Актеры и Кинофильмы, на ER-диаграмме отсутствует. Это и понятно, так как любая киностудия может пригласить для участия в фильме несколько актеров и, и любой актер может быть связан с киностудией контрактом, предусматривающим участие в съемках нескольких кинофильмов.
Любая связь, соединяющая более двух множеств сущностей, может быть преобразована в набор бинарных связей типа "многие-к-одному". В качестве примера рассмотрим четырехстороннюю связь Контракты (Рис. 2.2.9.). Здесь имеет место как многосторонняя связь, так и связь с несколькими ролями. Связь Контракты затрагивает уже две киностудии, актеров и кинофильмы. Смысл состоит в том, что одна киностудия, заключившая контракт с актером, может подписать контракт с другой киностудией, который позволил бы актеру участвовать в работе над новым кинофильмом. Тогда связь Контракты будет описана кортежами следующего вида:
{Киностудия1, Киностудия2, Актер, Кинофильм}
Имеется в виду, что Киностудия2 заключает контракт с Киностудией1, оговаривающий условия привлечения Актера Киностудии1 на съемки Кинофильма, который выпускает Киностудия2.
Рис. 2.2.9. Четырехсторонняя связь.
Четырехсторонняя связь Контракты, изображенная на Рис. 2.2.9., может быть заменена соединяющим множеством сущностей Контракты, представленной на Рис. 2.2.10.
Рис. 2.2.10. Замена многосторонней связи соединяющим множеством сущностей
и набором бинарных связей.
Множество сущностей Контракты принимает участие в четырех бинарных связях. Поскольку в связи Контракты имеются четыре значения сущностей, то можно считать, что множество сущностей Контракты содержит некоторую сущность, соединенную связью Актер-Участник с сущностью Актеры, связью Кинофильм-Участник -- с сущностью Кинофильм, а также с сущностями Киностудия1 и Киностудия2 множества сущностей Киностудии посредством связей Студия_Владелец_Актера и Студия_Продюсер. Все описанное выше справедливо, если в составе множества данных, соответствующего связи Контракты, имеется кортеж
{Киностудия1, Киностудия2, Актер, Кинофильм}