- •Введение
- •1. Информационная система (ис):
- •2.Типы и структуры данных
- •2.1.Основные типы данных
- •2.1.Методы доступа к данным
- •2.1.1.Методы поиска по дереву
- •2.2.2.Хеширование
- •3. Представление данных с помощью модели "сущность-связь".
- •3.1.Элементы модели
- •3.2.Диаграмма "сущность-связь".
- •4. Даталогические модели
- •4.1.Иерархическая модель данных
- •4.1.1.Структура данных
- •4.1.2.Операции над данными, определенные в иерархической модели:
- •4.1.3. Ограничения целостности
- •4.2. Сетевая модель данных
- •4.2.1. Структура данных
- •4.2.2.Операции над данными
- •4.3. Реляционная модель данных
- •1. Основные понятия
- •4.3.1. Структура данных
- •4.3.2. Фундаментальные свойства отношений
- •4.3.2.1. Отсутствие кортежей-дубликатов
- •4.3.2.2. Отсутствие упорядоченности кортежей
- •4.3.2.3. Отсутствие упорядоченности атрибутов
- •4.3.2.4. Атомарность значений атрибутов
- •4.3.3.Свойства отношений.
- •4.3.4. Реляционная модель и модель сущность - связь
- •4.3.4.1. Преобразование er-модели в реляционную модель
- •5. Языки запросов к реляционным базам данных
- •5.1. Реляционная алгебра
- •Общая интерпретация реляционных операций
- •Замкнутость реляционной алгебры и операция переименования
- •Правила записи выражений реляционной алгебры
- •5.2. Реляционное исчисление кортежей
- •5.3. Реляционное исчисление доменов
- •5.3. Ограничения реляционных баз данных
- •5.4. Постреляционные субд
- •6. Проектирование информационных систем и баз данных
- •Информационное моделирование процессов предметной области и применение потоковых диаграмм
- •7. Проектирование реляционных баз данных с использованием нормализации
- •7.1. Основные свойства нормальных форм
- •7.2. Функциональная зависимость
- •2. Ни для какого зависимость
- •7.2.1. Аксиомы функциональных зависимостей
- •7.2.2. Вычисление замыканий
- •7.2.3. Полная функциональная зависимость
- •7.2.4. Транзитивная функциональная зависимость
- •7.2.5.2. Вторая нормальная форма
- •7.2.5.3. Третья нормальная форма
- •7.2.5.4. Нормальная форма Бойса-Кодда
- •7.2.5.5. Четвертая нормальная форма
- •7.2.5.6. Пятая нормальная форма
- •7.2.6. Функциональные зависимости и проектирование базы данных.
- •Дополнительная литература
7.2.5.2. Вторая нормальная форма
Очень часто первичный ключ отношения включает несколько атрибутов (в таком случае его называют составным). При этом вводится понятие полной функциональной зависимости.
Отношение находится во второй нормальной форме, если оно находится в 1NF и каждый не ключевой атрибут полностью зависит от первичного (определяющего запись) ключа целиком. Те поля, которые зависят только от части первичного ключа, должны быть выделены в состав отдельных таблиц.
Пусть (X,Y) – возможный ключ отношения R: (X,Y)(B1,C1), но поля B1,... зависят от X (части возможного ключа), т.е. XB1,... Тогда R = [X,B1,...](R) * [X,Y,C1,...](R), где C1,... – остальные атрибуты отношения R. Это разложение отношения R на два отношения [X,B1,...](R) и [X,Y,C1,...](R) устраняет (внутритабличную) зависимость XB1,... от части ключа. Причем естественное соединение этих двух отношений точно совпадает с исходным отношением. Такое разложение называется декомпозицией без потерь.
Рассмотрим следующий пример схемы отношения:
СОТРУДНИКИ-ОТДЕЛЫ-ПРОЕКТЫ
(СОТР_ИМЯ, СОТР_ЗАРП, ОТД_НОМЕР, ПРО_НОМЕР, СОТР_ЗАДАН)
СОТР_ИМЯ |
СОТР_ЗАРП |
ОТД_НОМЕР |
ПРО_НОМЕР |
СОТР_ЗАДАН |
Козлов |
10000 |
Отдел 2 |
Проект 2 |
Анализ данных |
Козлов |
10000 |
Отдел 2 |
Проект 3 |
Проектирование |
Иванов |
9000 |
Отдел 3 |
Проект 2 |
Программирование |
Максимов |
10000 |
Отдел 2 |
Проект 1 |
Анализ данных |
Иванов |
9000 |
Отдел 3 |
Проект 1 |
Анализ данных |
Первичный ключ: СОТР_ИМЯ, ПРО_НОМЕР
Функциональные зависимости:
СОТР_ИМЯ СОТР_ЗАРП
СОТР_ИМЯ ОТД_НОМЕР
ОТД_НОМЕР СОТР_ЗАРП
СОТР_ИМЯ, ПРО_НОМЕР СОТР_ЗАДАН
Как видно, хотя первичным ключом является составной атрибут СОТР_ИМЯ, ПРО_НОМЕР, атрибуты СОТР_ЗАРП и ОТД_НОМЕР функционально зависят от части первичного ключа, атрибута СОТР_ИМЯ. В результате мы не сможем вставить в отношение СОТРУДНИКИ-ОТДЕЛЫ-ПРОЕКТЫ кортеж, описывающий сотрудника, который еще не выполняет никакого проекта (первичный ключ не может содержать неопределенное значение). При удалении кортежа мы не только разрушаем связь данного сотрудника с данным проектом, но утрачиваем информацию о том, что он работает в некотором отделе. При переводе сотрудника в другой отдел мы будем вынуждены модифицировать все кортежи, описывающие этого сотрудника, или получим несогласованный результат.
Можно произвести следующую декомпозицию отношения СОТРУДНИКИ-ОТДЕЛЫ-ПРОЕКТЫ в два отношения СОТРУДНИКИ-ОТДЕЛЫ и СОТРУДНИКИ-ПРОЕКТЫ:
СОТРУДНИКИ-ОТДЕЛЫ (СОТР_ИМЯ, СОТР_ЗАРП, ОТД_НОМЕР)
СОТР_ИМЯ |
СОТР_ЗАРП |
ОТД_НОМЕР |
Козлов |
10000 |
Отдел 2 |
Иванов |
9000 |
Отдел 3 |
Максимов |
10000 |
Отдел 2 |
Первичный ключ: СОТР_ИМЯ
Функциональные зависимости:
СОТР ИМЯ СОТР_ЗАРП
СОТР ИМЯ ОТД_НОМЕР
ОТД_НОМЕР СОТР_ЗАРП
СОТРУДНИКИ-ПРОЕКТЫ (СОТР ИМЯ, ПРО_НОМЕР, СОТР_ЗАДАН)
СОТР ИМЯ |
ПРО_НОМЕР |
СОТР_ЗАДАН |
Козлов |
Проект 2 |
Анализ данных |
Козлов |
Проект 3 |
Проектирование |
Иванов |
Проект 2 |
Программирование |
Максимов |
Проект 1 |
Анализ данных |
Иванов |
Проект 1 |
Анализ данных |
Первичный ключ: СОТР ИМЯ, ПРО_НОМЕР
Функциональные зависимости:
СОТР ИМЯ, ПРО_НОМЕР CОТР_ЗАДАН
Каждое из этих двух отношений находится в 2NF, и в них устранены отмеченные выше аномалии (легко проверить, что все указанные операции выполняются без проблем).
Если допустить наличие нескольких ключей, то определение 2NF примет следующий вид:
Отношение R находится во второй нормальной форме (2NF) в том и только в том случае, когда оно находится в 1NF, и каждый неключевой атрибут полностью зависит от каждого ключа R.