Ответ
Существует 6 нормальных форм (НФ), но ключевыми для практического применения являются первые три.
Основные нормальные формы:
-
Первая нормальная форма (1НФ): Атомарность данных. Все значения атрибутов неделимы, нет повторяющихся групп.
-- НЕ 1НФ (список в ячейке) CREATE TABLE Orders (order_id INT, products VARCHAR(255)); -- 'ProductA, ProductB' -- 1НФ CREATE TABLE OrderItems (order_id INT, product_id INT); - Вторая нормальная форма (2НФ): Выполнена 1НФ, и каждый неключевой атрибут полностью зависит от всего первичного ключа (нет частичных зависимостей).
- Третья нормальная форма (3НФ): Выполнена 2НФ, и неключевые атрибуты не зависят друг от друга (нет транзитивных зависимостей).
Дополнительные нормальные формы:
- Нормальная форма Бойса-Кодда (НФБК): Усиленная 3НФ, где любая нетривиальная функциональная зависимость имеет в качестве детерминанта потенциальный ключ.
- Четвертая нормальная форма (4НФ): Отсутствие многозначных зависимостей.
- Пятая нормальная форма (5НФ): Отсутствие зависимостей соединения.
На практике для большинства приложений достаточно приведения к 3НФ.
Ответ 18+ 🔞
А, нормальные формы, блядь! Ну, это как с квартирой: можно жить в хрущёвке, где всё в одной куче, а можно сделать евроремонт с перегородками. Только тут не стены, а таблицы в базе.
Слушай, их, этих форм, дохуя — целых шесть. Но если ты не академик какой-нибудь, то первые три — твои лучшие друзья, а остальные — так, для понтов и особых извращенцев.
Вот что реально нужно знать:
-
Первая нормальная форма (1НФ). Это базовый уровень, ёпта. Представь, что у тебя в ячейке не список, а одно значение. Как атом — не делится. Всё, что можно записать через запятую — выноси в отдельную строку, хитрая жопа!
-- Так делать — пиздец как плохо (в ячейке целый список товаров) CREATE TABLE Orders (order_id INT, products VARCHAR(255)); -- 'Молоко, Хлеб, Водка' -- А вот так — уже красота, 1НФ CREATE TABLE OrderItems (order_id INT, product_id INT); -
Вторая нормальная форма (2НФ). Тут уже начинается магия. Ты должен убедиться, что вся информация в строке зависит от ВСЕГО первичного ключа, а не от его кусочка. Чтобы не было так, что половина данных привязана к одному полю ключа, а половина — к другому. Это как если бы отчество человека зависело только от его имени — бред же, блядь.
-
Третья нормальная форма (3НФ). Апофеоз для обычного смертного. Ты добился 1НФ и 2НФ, и теперь нужно глянуть, не зависят ли поля в таблице друг от друга. Например, если у тебя есть
город_idиназвание_страны, то страна-то зависит от города, а не от заказа! Значит, гони эту страну нахуй в отдельную таблицу про города. Убираем эти транзитивные зависимости, и мозг сразу легче дышит.
А дальше идёт уже высший пилотаж, на который обычно всем похуй:
- НФБК (Бойса-Кодда). Это как 3НФ, но на стероидах. Для ситуаций, когда ключей может быть несколько, и нужно, чтобы всё от них зависело.
- Четвёртая (4НФ) и Пятая (5НФ). Вот тут уже конкретные извращения про многозначные зависимости и зависимости соединения. Если ты до этого докатился в реальном проекте, то либо ты гений, либо у тебя проект — ебаный ад, и тебе нужно срочно менять работу.
Короче, запомни: в 95% случаев твоя цель — добиться 3НФ. База будет структурированной, данные не будут повторяться как сумасшедшие, и жить станет проще. Всё остальное — для особых случаев, когда и правда волнение ебать и терпения ноль.