Можете объяснить, что подразумевается под третьей нормальной формой в реляционной базе данных?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Третья нормальная форма означает, что таблица уже приведена к хорошей структуре: все неключевые поля зависят только от ключа, а не друг от друга. Это снижает дублирование данных и убирает аномалии при обновлении. На собеседовании важно показать, что 3НФ — это следующий шаг после 2НФ и борьба с транзитивными зависимостями.
Определение:
Таблица находится в третьей нормальной форме, если она уже находится во второй нормальной форме и при этом ни один неключевой столбец не зависит транзитивно от первичного ключа.
Проще говоря: каждый факт должен храниться в одном месте и зависеть только от ключа таблицы, а не от другого неключевого поля. Если employee_id -> department_id и department_id -> department_name, то department_name не должен храниться в таблице сотрудников, потому что он зависит не напрямую от сотрудника, а через отдел.
Пример использования:
Допустим, есть таблица сотрудников:
employees
- employee_id
- employee_name
- department_id
- department_name
Здесь department_name зависит от department_id, а не от employee_id напрямую. Это нарушает 3НФ.
Правильнее разделить на две таблицы:
employees
- employee_id
- employee_name
- department_id
departments
- department_id
- department_name
Теперь название отдела хранится только в departments, и при изменении имени отдела не нужно обновлять его в каждой строке сотрудников.
Пояснение кода:
Код не требуется, так как это концепция проектирования схемы БД. Разберём пример по шагам:
- В исходной таблице у каждого сотрудника хранится идентификатор отдела и имя отдела.
- Имя отдела повторяется у многих сотрудников, что создаёт дублирование.
- При переименовании отдела пришлось бы менять много строк, иначе данные разъедутся.
- После разбиения на
employeesиdepartmentsинформация об отделе хранится один раз. - Связь между таблицами остаётся через
department_id, а избыточность исчезает.
Ключевые моменты:
- 3НФ устраняет транзитивные зависимости между неключевыми атрибутами.
- Все неключевые поля должны зависеть только от ключа, а не друг от друга.
- Нормализация уменьшает дублирование и риск несогласованных данных.
- После нормализации часто нужны JOIN’ы для получения полной информации.
- В реальных системах 3НФ — это баланс между целостностью данных и удобством чтения.