
- •Содержание
- •Глава 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
4.1. Декомпозиция без потерь
Один из методов избежать аномалии обновления в процессе нормализации – выполнение декомпозиции (разбиения) исходного отношения на меньшие отношения. Эту процедуру надо выполнить так, чтобы оба свойства декомпозиции были сохранены. Первое из них – это свойство обратимости, которое позволит восстановить любой кортеж исходного отношения, используя соответствующие кортежи меньших отношений. Второе – сохранение ограничения, наложенного на исходное отношение, посредством наложения определенных ограничений на каждое из меньших отношений. Иначе говоря, интерес представляет только та декомпозиция, которая выполняется без потери информации.
В качестве примера рассмотрим отношение Поставщики с атрибутами {Код, Статус,Город}. Выполним два варианта декомпозиции отношения Поставщики (Рис. 4.2.):
Рис. 4.2. Декомпозиции отношения Поставщики
1. В случае а) информация не утрачивается, поскольку Статус_поставщика и Город_поставщика содержат данные о том, что поставщик П3 имеет Статус 30 и находится в Новгороде. Соответственно и П5 имеет Статус 30 и находится в Твери.
2. В случае б) некоторая информация утрачивается, поскольку оба поставщика имеют Статус 30, но нельзя сказать в каком городе находится каждый из них, т.е. вторая декомпозиция не является декомпозицией без потерь.
Процесс декомпозиции на самом деле является операцией проекции, т.е. каждая из представленных на Рис. 4.2. переменных-отношений: Статус_поставщика, Город_поставщика и Статус_города -- в действительности являются проекциями отношения Поставщики.
Если операцией декомпозиции в процедуре нормализации является операция проекции, то обратной операцией должна быть операция соединения.
Пусть R1 и R2 проекции некоторого отношения R. Какие условия должны быть соблюдены, чтобы обратные соединения R1 и R2 гарантировали бы получение R?
Ответ на это вопрос даёт теорема Хеза.
Теорема Хеза: Пусть R{A, B, C} является отношением, где А, В и С атрибуты этого отношения. Если R удовлетворяет Ф3 А®В, то R равно соединению его проекции
{A, B} и {A,C}.
Обозначим А-Код, B-Статус, C-Город. Согласно теореме Хеза, отношение Поставщики можно разбить на проекции:
{Код, Статус} и {Код, Город} без утраты информации
и на проекции:
{Код, Статус} и {Статус, Город} с потерей информации.
4.2. Первая, вторая и третья нормальные формы.
Перейдем к процедуре нормализаций и дадим определение 1НФ.
Отношение находится в первой нормальной форме(1НФ ) тогда и только тогда, когда все используемые в нем домены содержат только скалярные значения.
Воспользуемся ранее рассмотренными таблицами: ПОСТАВЩИКИ, ТОВАР И ПОСТАВКИ (рис.1.4) – и на их базе составим одну таблицу , включающую основные поля этих таблиц.
Дадим этой таблице название: ПЕРВАЯ. Эта таблица будет содержать следующие поля:
ПЕРВАЯ {Код_поставщика, Статус, Город , Код_товара, Квота }
ПЕРВИЧНЫЙ КЛЮЧ {Код_поставщика, Код_товара }.
Введем дополнительные ограниченичения для данных таблицы ПЕРВАЯ в виде функциональной зависимости Город ® Статус, т. е. статус поставщика определяется местом его нахождения. Например, все поставщики из Новгорода должны иметь статус 10, а поставщики из Москвы – статус 20.
Все множество функциональных зависимостей для таблицы ПЕРВАЯ изображены в виде диаграммы, представленной на Рис. 4.3.
Рис. 4.3. Функциональные зависимости для таблицы Первая
Из этой диаграммы видно , что первичный ключ таблицы представляет собой комбинацию двух полей: {Код_поставщика, Код_товара }.
Кроме того, стрелки начинаются не только с первичных ключей, но и с неключевых атрибутов. Не все атрибуты неприводимо зависимы от первичного ключа. В частности, атрибуты Статус и Город, каждый в отдельности зависимы от Код_поставщика и не являются взаимно независимыми.
Для иллюстрации некоторых трудностей, порождаемых этими стрелками, рассмотрим таблицу ПЕРВАЯ, представленную на рис. 4.4.
Рис. 4.4. Таблица данных Первая
В каждом кортеже с Код_поставщика S1 в атрибуте Город указано значение: Москва, а в каждом кортеже с значением Москва, в атрибуте Статус стоит число 20 и т. д.
При работе с таблицами, содержащими избыточные данные, могут возникнуть проблемы , которые называются аномалиями обновления . Эти аномалии подразделяются на аномалии вставки – INSERT, аномалии удаления – DELETE и аномалии модификации – UPDATE.
Для проверки таблицы ПЕРВАЯ подвергнем ее испытаниям при помощи перечисленных выше операций.
Операция INSERT:
В таблице ПЕРВАЯ не показан поставщик S5 из Твери, хотя в таблице ПОСТАВЩИК он присутствует. Дело в том, что до тех пор, пока он не произвел поставку товара, для него не задано значение первичного ключа, а резервирование кортежа со значением первичного ключа NULL правилами СУБД не поддерживается.
Операция DELETE:
Если в таблице ПЕРВАЯ удалить кортеж с значением Код_поставщика S3, то будет утрачена информация о поставщике и о том, что поставщик находился в Пскове.
В том и другом случае основная проблема заключается в том, что отношение Первая содержит информацию о товарах и о поставщиках. Удаление информации о поставщиках вызывает удаление информации о товарах и наоборот. Наша задача разделить информацию на несколько частей: информацию о товарах записать в одно отношение, а информацию о поставщиках — в другое.
Таким образом, процедуру нормализации можно охарактеризовать как процедуру разбиения логически не связанной информации по отдельным отношениям.
Операция UPDATE:
Название города для определённого поставщика повторяется несколько раз. Если при обновлении поставщик S1 переместится из Москвы в Тулу, то возникает проблема поиска в таблице Первая всех кортежей, в которых соединены S1 и значение "Москва".
Для решения выше перечисленных проблем, нужно произвести декомпозицию таблицы Первая и представить ее в виде следующих таблиц:
Вторая (Код_поставщика, Статус, Город) ;
Поставки (Код_поставщика, Код_товара, Квота).
Составим диаграмму ФЗ для этих таблиц:
Рис. 4.5. Диаграмма ФЗ для таблиц Вторая и Поставки
Таблица данных для этих отношений примет вид:
Рис. 4.6. Таблицы данных Вторая и Поставки
1. С помощью вставок (INSERT) в отношение Вторая можно включить информацию, что поставщик S5 находится в Твери, даже если к данному моменту поставку он не произвел.
2. Теперь можно удалить (DELETE) информацию о поставке, удаляя из отношения Поставки соответствующий кортеж S3 P2, при этом информация о том, что поставщик S3 находится в Пскове, не утрачивается.
3. В отношении Вторая название города для каждого поставщика появляется всего один раз. Иначе говоря, избыточность данных Код_поставщика ® Город устранена.
Благодаря этому в соответствующем кортеже отношение Вторая с лёгкостью можно заменить для поставщика S1, например, город Москва на Тулу.
Таким образом, разбиение отношения Первая на отношения Вторая и Поставки состоит в исключении зависимостей, которые не были неприводимыми.