Какие знаешь нормальные формы БД

Python Middle Без компании
Какие знаешь нормальные формы БД
Ответы
Нормальные формы (НФ) — это правила проектирования реляционных баз данных, которые помогают избежать аномалий при операциях с данными. Основные нормальные формы: - **1НФ** — все атрибуты атомарны (неделимы), нет повторяющихся групп. Пример: вместо столбца `Телефоны` с данными `"123, 456"` создаются отдельные записи для каждого телефона. - **2НФ** — выполняется 1НФ + все неключевые атрибуты зависят от всего первичного ключа (нет частичной зависимости). Пример: в таблице `Заказы(OrderID, ProductID, ProductName, Quantity)` поле `ProductName` зависит только от `ProductID` — нарушение. Нужно разделить на `Заказы` и `Продукты`. - **3НФ** — выполняется 2НФ + нет транзитивных зависимостей (неключевые атрибуты не зависят от других неключевых атрибутов). Пример: в `Сотрудники(EmployeeID, Department, Manager)` поле `Manager` зависит от `Department` — нарушение. Нужно выделить таблицу `Отделы`. - **НФБК (Бойса-Кодда)** — частный случай 3НФ, где любая детерминанта (атрибут, от которого зависит другой) является потенциальным ключом. - **4НФ** — выполняется НФБК + нет многозначных зависимостей. Пример: в `Студенты-Курсы(StudentID, CourseID, Hobby)` хобби не зависит от курса — нарушение. Нужно разделить. - **5НФ (ПНФ)** — выполняется 4НФ + отсутствуют зависимости соединения. Пример приведения к 3НФ: ``` -- Исходная таблица (нарушает 2НФ и 3НФ) CREATE TABLE Orders ( OrderID INT, ProductID INT, ProductName VARCHAR(100), CustomerName VARCHAR(100), PRIMARY KEY (OrderID, ProductID) ); -- Нормализованная структура CREATE TABLE Orders (OrderID INT PRIMARY KEY, CustomerName VARCHAR(100)); CREATE TABLE Products (ProductID INT PRIMARY KEY, ProductName VARCHAR(100)); CREATE TABLE OrderItems (OrderID INT, ProductID INT, PRIMARY KEY (OrderID, ProductID)); ```