← Назад к вопросам
Какие знаешь требования второй нормальной формы?
2.0 Middle🔥 301 комментариев
#Требования и их анализ
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Вторая нормальная форма (2NF)
2NF требует две вещи:
1. Таблица должна быть в 1NF
- Все значения атомарные
- Нет repeating groups (повторяющихся групп)
- Есть первичный ключ
2. Все non-key атрибуты полностью зависят от primary key
Значит: атрибут должен зависеть от ЦЕЛОГО первичного ключа, а не от его части.
Пример нарушения
Представь таблицу StudentCourse с составным ключом (student_id, course_id):
student_id | course_id | grade | student_name | instructor
S1 | C1 | A | John | Prof. Smith
S1 | C2 | B | John | Prof. Jones
S2 | C1 | C | Jane | Prof. Smith
Проблема:
- student_name зависит ТОЛЬКО от student_id (не от целого ключа)
- instructor зависит ТОЛЬКО от course_id (не от целого ключа)
- Это нарушение 2NF!
Исправление
Разбить на три таблицы:
Student: (student_id, student_name) Course: (course_id, instructor) Enrollment: (student_id, course_id, grade)
Теперь grade зависит от целого ключа (student_id + course_id) ✓
Практический пример из системы
Таблица QuestionTag (question_id, tag_id):
- Если содержит tag_name → нарушение 2NF
- tag_name зависит только от tag_id
Исправление: Tag: (tag_id, tag_name) QuestionTag: (question_id, tag_id)
Почему это важно?
Удаляет аномалии:
- Update anomaly: не надо обновлять student_name в 100 местах
- Delete anomaly: если удалить запись, не потеряем студента
- Insert anomaly: можем добавить студента без курса
Правило запомни
"The whole key and nothing but the key"
Каждый non-key атрибут зависит от ПОЛНОГО primary key.