Нормальные и ненормальные данные
Разобравшись с сущностями и связями, пора перейти к проектированию схемы БД. И тут мы можем увидеть, что одни и те же сущности могут иметь совершенно различное представление. И мы убедимся в этом по ходу главы.
А для начала, давайте возьмем предметную область "Расписание университета" и попробуем спроектировать схему БД. Взглянем вот на такую таблицу:
ФИО | Должность | Факультет | Предметы | Телефон (сотовый) | Телефон (рабочий) |
---|---|---|---|---|---|
Туйкин А. М. | ассистент | ИВМиИТ, КТП | БД, АиСД | +7 (917) 123 12 12 | - |
Иванов И. И. | доцент | ИВМиИТ, КТК | БД, программирование | +7 (927) 117 09 10 | +7 (843) 212 42 16 |
Давайте обсудим, что в ней не так и почему?
Наводящие вопросы:
- Чем определяется строка?
- Как узнать, кто ведет БД?
- Что не так с телефоном, факультетом, предметами?
Мои наблюдения:
- Много сущностей намешаны в одну таблицу
- Строка определяется всей строкой (нет явно выраженного идентификатора строки)
- В одном столбце встречается несколько свойств (телефон: номер и тип; факультет: факультет и кафедра)
- Имя столбца не соответствует данным (факультет)
- Данные дублируются (название факультета, название предметов)
- Присутствуют коллекции в рамках одного свойства (предметы)
- Одно и то же свойство "размазано" по разным столбцам (телефоны)
Все эти особенности нашей схемы можно объединить и назвать одном словом - аномалия.
Аномалия - такая ситуация в таблице БД, которая приводит к противоречию в БД либо существенно усложняет обработку. Причиной является излишнее дублирование данных в таблице, которое вызывается наличием функциональных зависимостей от неключевых атрибутов. Т.е. аномалия - это когда я не могу внести изменение в один объект, не затронув другого.
Выделяют 3 типа аномалий:
Аномалии-модификации проявляются в том, что изменение одних данных может повлечь просмотр всей таблицы и соответствующее изменение некоторых записей таблицы. Например, нам нужно поменять название факультета.
Аномалии-удаления случаются при удалении какого либо кортежа из таблицы, которое может привести к потере информации, которая не связана на прямую с удаляемой записью. Например, удаление записи о преподавателе приведет к потере информации о кафедре, т.к. она нигде больше не присутствует.
Аномалии-добавления возникают, когда информацию в таблицу нельзя поместить, пока она не полная, либо вставка записи требует дополнительного просмотра таблицы. Например, мы хотим добавить в БД преподавателя, но пока не знаем, какие предметы он будет вести. Соответственно, нам необходимо оставлять пустые поля.1
Процесс нормализации
Процесс избавления от аномалий называется процессом нормализации БД. Соответственно, цель нормализации - исключить избыточность данных и убрать функциональные зависимости данных (когда одни данные в таблице зависят от других.).
Процесс проектирования методом НФ является итеративным. Существуют различные нормальные формы (6 + 2). Каждая из которых сохраняет предыдущие и добавляет дополнительные ограничения на допустимые типы функциональных зависимостей. Соответственно, процесс является итеративным. И с каждой следующей итерацией мы продолжаем процесс декомпозиции данных.
Зачем нужен процесс нормализации?
На этот можно посмотреть с двух сторон:
- математический подход (взгляд архитектора БД)
- прагматический подход (взгляд программиста)
Каждый из них приследует свои цели:
Архитектор:
- устранение аномалий (конфликтов), проблем и неоднозначностей (чтобы все было корректным с математической точки зрения)
Программист:
- повышение производительности
- удобство работы
Собственно, теперь перейдем к самим нормальным формам.
И перед приведением к первой нормальной форме, стоит обратить внимание на одно свойство реляционных таблиц. В таблицах (с точки зрения реляционной алгебры) не имеет значения порядок строк и столбцов. Это очень важное замечание. И поэтому, с точки зрения релационной алгебры, Excel
- не таблица. Хотя, думаю, корректнее было бы просто разделить понятия отношение и таблица.
Теперь, когда порядок строк и столбцов не имеет значения, можем идти дальше. Всего существует 6 нормальных форм + две именные нормальные формы. Мы разберем некоторые из них (наиболее актуальные с практической точки зрения)
Первая нормальная форма (1-НФ, 1-NF)
Фокус внимания: строка, столбец и ячейка используются по-назначению.
Характеристики (ограничения):
- нет строк-дубликатов
- в каждой строке хранится атомарное значение. Факультет и кафедра - это два разных свойства.
- в столбце хранятся данные одного типа.
- отсутствуют массивы и списки в любой виде. Например, предметы и телефоны в нашем примере нарушают эту характеристику.
Приведем нашу таблицу к 1-НФ:
ФИО | Должность | Факультет | Кафедра | Предметы | Номер тел | Тип тел |
---|---|---|---|---|---|---|
Туйкин А. М. | ассистент | ИВМиИТ | КТП | БД, АиСД | +7 (917) 123 12 12 | сотовый |
Иванов И. И. | доцент | ИВМиИТ | КТК | БД, программирование | +7 (927) 117 09 10 | сотовый |
Иванов И. И. | доцент | ИВМиИТ | КТК | БД, программирование | +7 (843) 212 42 16 | рабочий |
Обратите внимание, дальнейшее приведение к 1-НФ возможно только при вынесении предметов в отдельную таблицу. Давайте сделаем это:
Сотрудники
ФИО | Должность | Факультет | Кафедра | Номер тел | Тип тел |
---|---|---|---|---|---|
Туйкин А. М. | ассистент | ИВМиИТ | КТП | +7 (917) 123 12 12 | сотовый |
Иванов И. И. | доцент | ИВМиИТ | КТК | +7 (927) 117 09 10 | сотовый |
Иванов И. И. | доцент | ИВМиИТ | КТК | +7 (843) 212 42 16 | рабочий |
Предметы
ФИО | Предмет |
---|---|
Туйкин А. М. | БД |
Туйкин А. М. | АиСД |
Иванов И. И. | БД |
Иванов И. И. | Программирование |
Вторая нормальная форма
Фокус внимания: Выбор правильного ключа (то, что однозначно определяет строку). Особенно, если он составной
Характеристики:
- таблица содержит ключ
- все неключевые столбцы зависят от полного ключа
Ключ - столбец (либо их множество), однозначно определяющий строку.
В первой таблице мы видим, что присутствует зависимость между ФИО, должностью, факультетом и кафедрой. Для соответствия 2-НФ нам необходимо разделить информацию о сотрудниках и их контактах:
Сотрудники
ФИО | Должность | Факультет | Кафедра |
---|---|---|---|
Туйкин А. М. | ассистент | ИВМиИТ | КТП |
Иванов И. И. | доцент | ИВМиИТ | КТК |
Иванов И. И. | доцент | ИВМиИТ | КТК |
Контакты
ФИО | Номер тел | Тип тел |
---|---|---|
Туйкин А. М. | +7 (917) 123 12 12 | сотовый |
Иванов И. И. | +7 (927) 117 09 10 | сотовый |
Иванов И. И. | +7 (843) 212 42 16 | рабочий |
Третья нормальная форма и нормальная форма Бойса-Кодда
Фокус внимания: неключевые столбцы. Нет транзитивных зависимостей
- неключевые столбцы не зависят от других неключевых столбцов (не является ли какие-либо столбцы функцией от набора неключевых столбцов?)
Четвертая нормальная форма
Фокус внимания: Многозначные зависимости (multivalue dependency)
Транзитивной зависимости нет, но есть другая (преподаватель, курс, аудитория)
- в таблице должно быть не более одной многозначной записимости. Если таких зависимостей больше, разбиваем на таблицы.
- При проектировании структуры БД важно представлять действия/операции, которые планируется делать над ними.
Глоссарий
Атрибут — свойство некоторой сущности. Часто называется полем таблицы.
Домен атрибута — множество допустимых значений, которые может принимать атрибут.
Кортеж — конечное множество взаимосвязанных допустимых значений атрибутов, которые вместе описывают некоторую сущность (строка таблицы).
Отношение — конечное множество кортежей (таблица).
Схема отношения — конечное множество атрибутов, определяющих некоторую сущность. Иными словами, это структура таблицы, состоящей из конкретного набора полей.
Проекция — отношение, полученное из заданного путём удаления и (или) перестановки некоторых атрибутов.
Функциональная зависимость между атрибутами (множествами атрибутов) X и Y означает, что для любого допустимого набора кортежей в данном отношении: если два кортежа совпадают по значению X, то они совпадают по значению Y. Например, если значение атрибута «Название компании» — Canonical Ltd, то значением атрибута «Штаб-квартира» в таком кортеже всегда будет Millbank Tower, London, United Kingdom. Обозначение: {X} -> {Y}.
Нормальная форма — требование, предъявляемое к структуре таблиц в теории реляционных баз данных для устранения из базы избыточных функциональных зависимостей между атрибутами (полями таблиц).
Метод нормальных форм (НФ) состоит в сборе информации о объектах решения задачи в рамках одного отношения и последующей декомпозиции этого отношения на несколько взаимосвязанных отношений на основе процедур нормализации отношений.
Вопросы
TODO
- Нормальные формы
Нормально - это хорошо? Денормализуем БД
- руководство по проектированию БД
- http://5fan.ru/wievjob.php?id=27101
- денормализация. Зачем?
- Стоит заметить, что нормальная форма выглядит интуитивно-естественной.
- Ненормализованная база - это как человек с двумя часами. Он не знает, которые показывают правильное время.
1. Есть мнение, что изобилие NULL
в БД свидетельствует о плохой схеме. ↩