- •Основы систем баз данных
- •Содержание
- •Введение
- •В первом разделе рассматриваются базовые понятия реляционной модели данных. Дается общая характеристика реляционной модели данных
- •Раздел 1. Базовые понятия реляционной модели данных. Общая характеристика реляционной модели данных
- •1.1. Типы данных
- •Простые типы данных
- •Структурированные типы данных
- •Ссылочные типы данных
- •Типы данных, используемые в реляционной модели
- •1.2. Домены
- •1.3. Отношения, атрибуты, кортежи отношения Определения и примеры
- •Свойства отношений
- •Первая нормальная форма
- •1.4. Контрольные вопросы
- •Раздел 2. Реляционная алгебра. Обзор реляционной алгебры
- •2.1. Замкнутость реляционной алгебры
- •2.2. Отношения, совместимые по типу
- •2.3. Оператор переименования атрибутов
- •2.4. Теоретико-множественные операторы Объединение
- •Пересечение
- •Вычитание
- •Декартово произведение
- •Специальные реляционные операторы Выборка (ограничение, селекция)
- •Проекция
- •Соединение
- •Общая операция соединения
- •Тэта-соединение
- •Экви-соединение
- •Естественное соединение
- •Деление
- •2.5. Примеры использования реляционных операторов
- •Невыразимость транзитивного замыкания реляционными операторами
- •Кросс-таблицы
- •2.6. Контрольные вопросы
- •Рздел 3. Нормальные формы отношений. Этапы разработки базы данных
- •3.1. Критерии оценки качества логической модели данных
- •Адекватность базы данных предметной области
- •Легкость разработки и сопровождения базы данных
- •Скорость операций обновления данных (вставка, обновление, удаление)
- •Скорость операций выборки данных
- •Основной пример
- •1Нф (Первая Нормальная Форма)
- •Аномалии обновления
- •Аномалии вставки (insert)
- •Аномалии обновления (update)
- •Аномалии удаления (delete)
- •3.2. Функциональные зависимости
- •Определение функциональной зависимости
- •Функциональные зависимости отношений и математическое понятие функциональной зависимости
- •3.3. 2Нф (Вторая Нормальная Форма)
- •Анализ декомпозированных отношений
- •Оставшиеся аномалии вставки (insert)
- •Оставшиеся аномалии обновления (update)
- •Оставшиеся аномалии удаления (delete)
- •3.4. 3Нф (Третья Нормальная Форма)
- •Алгоритм нормализации (приведение к 3нф)
- •3.5. Анализ критериев для нормализованных и ненормализованных моделей данных Сравнение нормализованных и ненормализованных моделей
- •3.6. Oltp и olap-системы
- •3.7. Корректность процедуры нормализации - декомпозиция без потерь. Теорема Хеза
- •3.8. Контрольные вопросы
- •Раздел 4. Нормальные формы более высоких порядков
- •4.1. Нфбк (Нормальная Форма Бойса-Кодда)
- •4.2. 4Нф (Четвертая Нормальная Форма)
- •4.3. 5Нф (Пятая Нормальная Форма)
- •4.4. Продолжение алгоритма нормализации (приведение к 5нф)
- •4.5. Контрольные вопросы
- •Раздел 5. Элементы модели "сущность-связь"
- •5.1. Основные понятия er-диаграмм
- •5.2. Пример разработки простой er-модели
- •5.3. Концептуальные и физические er-модели
- •5.4. Контрольные вопросы
- •Раздел 6. Элементы языка sql
- •6.1. Операторы sql
- •Операторы ddl (Data Definition Language) - операторы определения объектов базы данных
- •Операторы dml (Data Manipulation Language) - операторы манипулирования данными
- •Операторы защиты и управления данными
- •6.2. Примеры использования операторов манипулирования данными
- •Insert - вставка строк в таблицу
- •Примеры использования оператора select
- •Отбор данных из одной таблицы
- •Отбор данных из нескольких таблиц
- •Использование имен корреляции (алиасов, псевдонимов)
- •Использование агрегатных функций в запросах
- •Использование агрегатных функций с группировками
- •Использование подзапросов
- •Использование объединения, пересечения и разности
- •Синтаксис оператора выборки данных (select)
- •Синтаксис оператора выборки
- •Синтаксис соединенных таблиц
- •Синтаксис условных выражений раздела where
- •Порядок выполнения оператора select
- •Стадия 1. Выполнение одиночного оператора select
- •Стадия 2. Выполнение операций union, except, intersect
- •Стадия 3. Упорядочение результата
- •Как на самом деле выполняется оператор select
- •Реализация реляционной алгебры средствами оператора select (Реляционная полнота sql)
- •6.3. Контрольные вопросы
- •Заключение
- •Библиографический список
2.2. Отношения, совместимые по типу
Некоторые реляционные операторы (например, объединение) требуют, чтобы отношения имели одинаковые заголовки. Действительно, отношения состоят из заголовка и тела. Операция объединения двух отношений есть просто объединение двух множеств кортежей, взятых из тел соответствующих отношений. Но будет ли результат отношением? Во-первых, если исходные отношения имеют разное количество атрибутов, то, очевидно, что множество, являющееся объединением таких разнотипных кортежей нельзя представить в виде отношения. Во-вторых, пусть даже отношения имеют одинаковое количество атрибутов, но атрибуты имеют различные наименования. Как тогда определить заголовок отношения, полученного в результате объединения множеств кортежей? В-третьих, пусть отношения имеют одинаковое количество атрибутов, атрибуты имеют одинаковые наименования, но определенны на различных доменах. Тогда снова объединение кортежей не будет образовывать отношение.
Определение 1. Будем называть отношения совместимыми по типу, если они имеют идентичные заголовки, а именно,
Отношения имеют одно и то же множество имен атрибутов, т.е. для любого атрибута в одном отношении найдется атрибут с таким же наименованием в другом отношении,
Атрибуты с одинаковыми именами определены на одних и тех же доменах.
Некоторые отношения не являются совместимыми по типу, но становятся таковыми после некоторого переименования атрибутов. Для того чтобы такие отношения можно было использовать в реляционных операторах, вводится вспомогательный оператор переименования атрибутов.
2.3. Оператор переименования атрибутов
Оператор переименования атрибутов имеет следующий синтаксис:
R RENAME Atr1, Atr2,…AS NewAtr1, New Atr2,…,
где R- отношение,
Atr1, Atr2,…- исходные имена атрибутов,
NewAtr1, New Atr2,…- новые имена атрибутов.
В результате применения оператора переименования атрибутов получаем новое отношение, с измененными именами атрибутов.
Пример 1.
Следующий оператор возвращает неименованное отношение, в котором атрибут City_Num переименован в Cityld:
City RENAME City_Num AS Cityld.
2.4. Теоретико-множественные операторы Объединение
Определение 2. Объединением двух совместимых по типу отношений A и B называется отношение с тем же заголовком, что и у отношений A и B, и телом, состоящим из кортежей, принадлежащих или A, или B, или обоим отношениям.
Синтаксис операции объединения:
A UNION B
Замечание. Объединение, как и любое отношение, не может содержать одинаковых кортежей. Поэтому, если некоторый кортеж входит и в отношение A, и отношение B, то в объединение он входит один раз.
Пример 2. Пусть даны два отношения A и B с информацией о сотрудниках.
Таблица 3
Отношение A
Табельный номер |
Фамилия |
Зарплата |
1 |
Иванов |
1000 |
2 |
Петров |
2000 |
3 |
Сидоров |
3000 |
Таблица 4
Отношение B
Табельный номер |
Фамилия |
Зарплата |
1 |
Иванов |
1000 |
2 |
Пушников |
2500 |
4 |
Сидоров |
3000 |
Объединение отношений A и B будет иметь следующий вид.
Таблица 5
Отношение A UNION B
Табельный номер |
Фамилия |
Зарплата |
1 |
Иванов |
1000 |
2 |
Петров |
2000 |
3 |
Сидоров |
3000 |
2 |
Пушников |
2500 |
4 |
Сидоров |
3000 |
Замечание. Как видно из приведенного примера, потенциальные ключи, которые были в отношениях A и B не наследуются объединением этих отношений. Поэтому, в объединении отношений A и B атрибут "Табельный номер" может содержать дубликаты значений. Если бы это было не так, и ключи наследовались бы, то это противоречило бы понятию объединения как "объединение множеств". Конечно, объединение отношений A и B имеет, как и любое отношение, потенциальный ключ, например, состоящий из всех атрибутов.