Вторая нормальная форма
Основные критерии:
Таблица должна находиться в первой нормальной форме.
Любое её поле, не входящее в состав первичного ключа, функционально полно зависит от первичного ключа.
Сразу скажу, что если Ваша таблица приведена к первой нормальной форме и у нее установлен уникальный id для каждой строки, то она находится и во второй нормальной форме.
Значение второго правила можно понять на примере, когда первичный ключ таблицы состоит из нескольких полей. То есть каждой строке соответствует уникальный набор из нескольких значение полей таблицы.
Например. Эта таблица находится в первой нормальной форме, но не во второй.
Категория | Дата | Скидка | Товар |
Книги | 10.10.2008 | 10% | PHP for dummies |
Ноутбуки | 11.10.2008 | 20% | Acer |
Книги | 10.10.2008 | 10% | Windows XP |
В этой таблице первичный ключ составляют первые два столбца (Категория и Дата).
Скидка функционально полно зависит от них обоих, так как определяется одновременно категорией и датой. А вот с товаром проблемы. Она зависит только от категории и не зависит от даты (в любой день будет лежать там, пока не купят). Поэтому, говорят, что он зависит функционально не полно от всего первичного ключа и функционально полно от его части (Категория). Это нарушает требования второй нормальной формы.
Исправляется это разделением этой таблицы на две другие:
Категория | Дата | Скидка |
Книги | 10.10.2008 | 10% |
Ноутбуки | 11.10.2008 | 20% |
Книги | 10.10.2008 | 10% |
Категория | Товар |
Книги | PHP for dummies |
Ноутбуки | Acer |
Книги | Windows XP |
Вот и все. Теперь эти таблицы находятся во второй нормальной форме.
Методы приведения к 2NF:
Создайте отдельные таблицы для наборов значений, относящихся к нескольким записям (Выше мы это сделали).
Свяжите эти таблицы с помощью внешнего ключа (В нашем случае – это поле Категория).