устранение дублирования информации; решение проблемы “присоединенных записей”. Почему дублирование информации – это плохо? Лишний расход памяти. Проблемы с корректировкой данных. Сотрудники ТабельныйНом ФИО НомОтдела НазОтдела 100 Иванов И.И 5 Отдел маркетинга 101 Петров П.П. 2 Отдел кадров 105 Сидоров С.С. 5 Отдел маркетинга 113 Новиков Н.Н. 2 Отдел кадров 128 Воробьев В.В. 2 Отдел кадров Сотрудники ТабельныйНом ФИО НомОтдела НазОтдела 100 Иванов И.И 5 Отдел маркетинга 101 Петров П.П. 2 Отдел кадров 105 Сидоров С.С. 5 Отдел маркетинга Пусть требуется добавить новый отдел с номером 10 и названием «Отдел логистики». Как это сделать в текущей таблице? Таблицу «Сотрудники» следует разбить на 2 проекции: Сотрудники2(ТабельныйНом, ФИО, НомОтдела) Отдел (НомОтдела, НазОтдела) Если к этим проекциям применить операцию join, то получим исходную таблицу. Полная декомпозиция таблицы – это набор произвольного числа ее проекций, соединение которых идентично исходной таблице. Процесс нормализации заключается в переходе от исходной таблицы к ее полной декомпозиции вплоть до получения таблиц в пятой нормальной форме. Таблица находится в 1НФ тогда и только тогда, когда в каждом ее поле (на пересечении строки и столбца) находится ровно одно значение (не более одного и не ноль значений). Специально для выполнения этого требования придумано значение NULL. Пример нарушения 1НФ: в поле НомерТелефона указано несколько номеров через запятую. НомОтдела НазОтдела НомерТелефона 2 Отдел маркетинга 111-111, 123-123 5 Отдел кадров 234-567, 222-333 Что делать? Создать новую таблицу для многозначного атрибута, в которую нужно добавить исходный первичный ключ НомОтдела НазОтдела 2 Отдел маркетинга 5 Отдел кадров НомОтдела НомерТелефона 2 111-111 2 123-123 5 234-567 5 222-333 Пусть X и Y – списки полей таблицы. Говорят, что Y функционально зависит от X, если каждому значению X соответствует единственное значение Y. Обозначают X->Y. Любое неключевое поле функционально зависит от первичного ключа! Пусть X и Y – списки полей таблицы. Говорят, что Y находится в полной функциональной зависимости от X, если: Y функционально зависит от X; Y функционально не зависит ни от какого подмножества X, не совпадающего с X. Заказы (НомерЗаказа, НомерТовара, ОписаниеТовара, Количество) Поле «ОписаниеТовара» зависит от части ключа «НомерТовара», т.е., не находится в полной функциональной зависимости от первичного ключа таблицы. Таблица находится в 2НФ тогда и только тогда, когда каждое неключевое поле таблицы связано полной функциональной зависимостью с первичным ключом. Пример нарушения 2НФ: рассмотрим таблицу: Заказы (НомерЗаказа, НомерТовара, ОписаниеТовара, Количество) Поле «ОписаниеТовара» зависит от части ключа «НомерТовара», т.е., не находится в полной функциональной зависимости от первичного ключа таблицы, требования 2НФ нарушаются. Что делать? Теорема Хита (устанавливает связь между функциональной зависимостью и полной декомпозицией таблицы). Пусть список столбцов таблицы разбит на 3 непересекающиеся части: H, J, K. Если K функционально зависит от J, то выполняется утверждение: Таблица = proj H, J (Таблица) join proj J, K (Таблица) Заказы (НомерЗаказа, НомерТовара, ОписаниеТовара, Количество) Поле «ОписаниеТовара» зависит от части ключа «НомерТовара». Положим J=«НомерТовара», K= «ОписаниеТовара», H=остальные столбцы, применим теорему Хита. Получим 2 проекции: Заказы2 (НомерЗаказа, НомерТовара, Количество) Товары(НомерТовара, ОписаниеТовара,) Таблица находится в 3НФ тогда и только тогда, когда она находится во 2НФ, и не существует функциональных зависимостей между неключевыми полями. Пример нарушения 3НФ: рассмотрим таблицу: Сотрудники (ТабельныйНомер, ФИО, НомерОтдела, НазваниеОтдела) НазваниеОтдела функционально зависит от НомерОтдела т.е, от неключевого поля. Такие зависимости называются транзитивными. Применяя теорему Хита, разобьем эту таблицу на 2 проекции: Сотрудники2 (ТабельныйНомер, ФИО, НомерОтдела) Отделы (НомерОтдела, НазваниеОтдела) Примечание: Обычно на практике достаточно ограничиться таблицами в 3НФ, остальные нормальные формы нарушаются редко и представляют только теоретический интерес. Таблица находится в НФБК тогда и только тогда, когда любая функциональная зависимость сводится к полной функциональной зависимости от первичного ключа (т.е., нет функциональных зависимостей ключевых полей от неключевых). Пример нарушения НФБК: рассмотрим таблицу (предполагается, что нет одинаковых городов): Адреса (Индекс, Город, Улица) Город функционально зависит от Индекс. Разбивать такую таблицу на 2 проекции не стоит. Лучше смириться с таким нарушением. Таблица находится в 4НФ тогда и только тогда, когда в каждой ее полной декомпозиции, состоящей из двух проекций, каждая проекция содержит первичный ключ исходной таблицы. Пример нарушения 4НФ: рассмотрим таблицу Сотрудник ФИО ИнострЯзык ИмяРебенка Смит Немецкий Джон Смит Немецкий Мэри Смит Русский Джон Смит Русский Мэри Это нарушение происходит из-за того, что два множественных атрибута объекта (т.е., такие атрибуты, которых у каждого объекта может быть несколько) поместили в одну и ту же таблицу, в то время как для каждого множественного свойства нужно создавать отдельную таблицу Исходную таблицу нужно разбить на две проекции: ФИО ИнострЯзык ФИО ИмяРебенка Смит Русский Смит Джон Смит Немецкий Смит Мэри Таблица находится в 5НФ тогда и только тогда, когда в каждой ее полной декомпозиции каждая проекция содержит первичный ключ исходной таблицы.