Нормальные и ненормальные данные

Разобравшись с сущностями и связями, пора перейти к проектированию схемы БД. И тут мы можем увидеть, что одни и те же сущности могут иметь совершенно различное представление. И мы убедимся в этом по ходу главы.

А для начала, давайте возьмем предметную область "Расписание университета" и попробуем спроектировать схему БД. Взглянем вот на такую таблицу:

ФИО Должность Факультет Предметы Телефон (сотовый) Телефон (рабочий)
Туйкин А. М. ассистент ИВМиИТ, КТП БД, АиСД +7 (917) 123 12 12 -
Иванов И. И. доцент ИВМиИТ, КТК БД, программирование +7 (927) 117 09 10 +7 (843) 212 42 16

Давайте обсудим, что в ней не так и почему?

Наводящие вопросы:

  1. Чем определяется строка?
  2. Как узнать, кто ведет БД?
  3. Что не так с телефоном, факультетом, предметами?

Мои наблюдения:

  1. Много сущностей намешаны в одну таблицу
  2. Строка определяется всей строкой (нет явно выраженного идентификатора строки)
  3. В одном столбце встречается несколько свойств (телефон: номер и тип; факультет: факультет и кафедра)
  4. Имя столбца не соответствует данным (факультет)
  5. Данные дублируются (название факультета, название предметов)
  6. Присутствуют коллекции в рамках одного свойства (предметы)
  7. Одно и то же свойство "размазано" по разным столбцам (телефоны)

Все эти особенности нашей схемы можно объединить и назвать одном словом - аномалия.

Аномалия - такая ситуация в таблице БД, которая приводит к противоречию в БД либо существенно усложняет обработку. Причиной является излишнее дублирование данных в таблице, которое вызывается наличием функциональных зависимостей от неключевых атрибутов. Т.е. аномалия - это когда я не могу внести изменение в один объект, не затронув другого.

Выделяют 3 типа аномалий:

Аномалии-модификации проявляются в том, что изменение одних данных может повлечь просмотр всей таблицы и соответствующее изменение некоторых записей таблицы. Например, нам нужно поменять название факультета.

Аномалии-удаления случаются при удалении какого либо кортежа из таблицы, которое может привести к потере информации, которая не связана на прямую с удаляемой записью. Например, удаление записи о преподавателе приведет к потере информации о кафедре, т.к. она нигде больше не присутствует.

Аномалии-добавления возникают, когда информацию в таблицу нельзя поместить, пока она не полная, либо вставка записи требует дополнительного просмотра таблицы. Например, мы хотим добавить в БД преподавателя, но пока не знаем, какие предметы он будет вести. Соответственно, нам необходимо оставлять пустые поля.1

Процесс нормализации

Процесс избавления от аномалий называется процессом нормализации БД. Соответственно, цель нормализации - исключить избыточность данных и убрать функциональные зависимости данных (когда одни данные в таблице зависят от других.).

Процесс проектирования методом НФ является итеративным. Существуют различные нормальные формы (6 + 2). Каждая из которых сохраняет предыдущие и добавляет дополнительные ограничения на допустимые типы функциональных зависимостей. Соответственно, процесс является итеративным. И с каждой следующей итерацией мы продолжаем процесс декомпозиции данных.

Зачем нужен процесс нормализации?

На этот можно посмотреть с двух сторон:

  1. математический подход (взгляд архитектора БД)
  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

1. Есть мнение, что изобилие NULL в БД свидетельствует о плохой схеме.

results matching ""

    No results matching ""