Нормализация Баз Данных
Нормализация баз данных - это пошаговый, обратимый процесс замены исходной схемы другой схемой, в которой таблицы имеют более простую и логичную структуру. Существуют следующие нормальные формы БД:
- 1НФ - первая нормальная форма
- 2НФ - вторая нормальная форма
- 3НФ - третья нормальная форма
- НФБК - нормальная форма Бойса-Кодда
- 4НФ - четвертая нормальная форма
- 5НФ - пятая нормальная форма
1. Первая нормальная форма
Основные критерии:
- Все строки должны быть различными.
- Все элементы внутри ячеек должны быть атомарными (не списками).
Другими словами, элемент является атомарным, если его нельзя разделить на части, которые могут использовать в таблице независимо друг от друга.
Категория | Товары |
Книги | Война и мир, Азбука |
Игрушки | Юла |
Исправить можно так:
Категория | Товары |
Книги | Война и мир |
Книги | Азбука |
Игрушки | Юла |
2. Вторая нормальная форма
Основные критерии:
- Таблица должна находиться в первой нормальной форме.
- Любое её поле, не входящее в состав первичного ключа, функционально полно зависит от первичного ключа.
Если Ваша таблица приведена к первой нормальной форме и у нее установлен уникальный id для каждой строки, то она находится и во второй нормальной форме.
Значение второго правила можно понять на примере, когда первичный ключ таблицы состоит из нескольких полей.
Например, следующая таблица находится в первой нормальной форме, но не во второй. В этой таблице первичный ключ составляют первые два столбца (Деталь и Склад). Количество функционально полно зависит от них обоих, так как определяется одновременно Деталью и Складом. А вот с ‘Адресом склада’ проблемы. Он зависит только от Склада не зависит от Детали.
Деталь, pk | Склад, pk | Количество | Адрес склада |
Экран | Склад 1 | 56 | Клочковская 34 |
Мышь | Склад 2 | 78 | Пушкинская 75 |
Клавиатура | Склад 3 | 90 | Коломенская 56 |
Поэтому, говорят, что он зависит функционально не полно от всего первичного ключа и функционально полно от его части (Склад). Это нарушает требования второй нормальной формы. Исправляется это разделением этой таблицы на две другие:
Склад, pk | Адрес склада |
Склад 1 | Клочковская 34 |
Склад 2 | Пушкинская 75 |
Склад 3 | Коломенская 56 |
Деталь, pk | Склад, pk | Количество |
Экран | Склад 1 | 56 |
Мышь | Склад 2 | 78 |
Клавиатура | Склад 3 | 90 |
3. Третья нормальная форма
Основные критерии:
- Таблица находится во второй нормальной форме.
- Любой её не ключевой атрибут функционально зависит только от первичного ключа.
Проще говоря, второе правило требует выносить все не ключевые поля, содержимое которых может относиться к нескольким записям таблицы в отдельные таблицы.
Например:
N табельный, PK | Фамилия | Имя | Отчество | Код должности | Оклад |
1 | Федоров | Иван | Иваныч | 1 | 1000 |
2 | Бурундуков | Федор | Федорович | 2 | 2000 |
3 | Стрелков | Иван | Иваныч | 1 | 1000 |
В этой таблице Оклад зависит не только от N табельный, но и от поля Код должности. Разделим эту таблицу на две другие:
N табельный, PK | Фамилия | Имя | Отчество | Код должности |
1 | Федоров | Иван | Иваныч | 1 |
2 | Бурундуков | Федор | Федорович | 2 |
3 | Стрелков | Иван | Иваныч | 1 |
Код должности | Оклад |
1 | 1000 |
2 | 2000 |
1 | 1000 |
Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.