← Назад к вопросам

Какие знаешь требования второй нормальной формы?

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.

Какие знаешь требования второй нормальной формы? | PrepBro