Основные принципы 1НФ, 2НФ и 3НФ в нормализации SQL с прим... | Вопросы для собеседования | Skilio
Основные принципы 1НФ, 2НФ и 3НФ в нормализации SQL с примерами
Вопрос:

Что такое "нормализация" в терминах баз данных и SQL? Назовите нормальные формы, которые вы знаете.

Какие различия между 1NF (Нормальной формой), 2NF и 3NF в нормализации SQL? Приведите примеры каждой формы в контексте таблицы базы данных.

Подсказки:

  • В 1NF все столбцы таблицы должны содержать атомарные значения, что означает, что каждый столбец должен хранить только одно значение на строку.
  • 2NF предполагает, что все атрибуты, не являющиеся ключами, полностью функционально зависят от первичного ключа, устраняя частичные зависимости.
  • 3NF требует, чтобы все атрибуты зависели не только от первичного ключа, но и были свободны от транзитивных зависимостей, что означает, что ни один атрибут, не являющийся ключом, не должен зависеть от другого атрибута, не являющегося ключом.

Выше ожиданий:

  • Знает концепцию «Нормальной формы Бойса-Кодда» (BCNF) как более строгой версии 3NF, которая обрабатывает аномалии, с которыми 3NF не может справиться.
  • Может изучить, как нормализация влияет на производительность базы данных, и компромиссы между нормализацией и денормализацией.
  • Понимание того, как денормализация может быть выгодной для производительности запросов.
  • Понимание того, как нормализация влияет на проектирование базы данных и его последствия для поддержания целостности данных.
Ответ:

1NF (Первая нормальная форма):

В первой нормальной форме (1NF) структура таблицы проектируется таким образом, чтобы гарантировать, что каждый столбец содержит атомарные значения. Это означает, что каждый столбец должен содержать только одно значение на строку, исключая повторяющиеся группы или массивы внутри одного столбца. Для достижения 1NF необходимо убедиться, что:

  • Каждый столбец в таблице содержит уникальные, неделимые значения.
  • Каждая строка уникально идентифицируется, часто с помощью первичного ключа.

Пример 1NF:

Рассмотрим таблицу, хранящую информацию о студентах и их записанных курсах:

StudentID StudentName Courses
1 Alice Math, Science
2 Bob Literature

Для преобразования этой таблицы в 1NF, разделите курсы на отдельные строки:

StudentID StudentName Course
1 Alice Math
1 Alice Science
2 Bob Literature

2NF (Вторая нормальная форма):

Таблица находится во второй нормальной форме (2NF), если она уже находится в 1NF, и все атрибуты, не являющиеся частью первичного ключа, полностью функционально зависят от первичного ключа. Это включает в себя устранение частичных зависимостей, где атрибут, не являющийся частью первичного ключа, зависит только от части составного первичного ключа.

Пример 2NF:

Начнем с таблицы, нарушающей 2NF:

CourseID StudentID CourseName InstructorName
C1 1 Math Dr. Smith
C2 2 Science Dr. Jones

В этом случае CourseID и StudentID вместе образуют первичный ключ, а InstructorName зависит только от CourseID. Для достижения 2NF таблицу необходимо разделить на две:

Таблица Courses:

CourseID CourseName InstructorName
C1 Math Dr. Smith
C2 Science Dr. Jones

Таблица Enrollments:

CourseID StudentID
C1 1
C2 2

3NF (Третья нормальная форма):

Таблица находится в третьей нормальной форме (3NF), если она находится во 2NF и все атрибуты свободны от транзитивных зависимостей. Это означает, что ни один атрибут, не являющийся частью первичного ключа, не должен зависеть от другого атрибута, не являющегося частью первичного ключа.

Пример 3NF:

Рассмотрим таблицу, которая не соответствует 3NF:

StudentID StudentName CourseID CourseName InstructorName
1 Alice C1 Math Dr. Smith

Здесь CourseName зависит от CourseID, а не непосредственно от первичного ключа StudentID. Для достижения 3NF таблицу нужно разбить еще на таблицы:

Таблица Students:

StudentID StudentName
1 Alice

Таблица Courses:

CourseID CourseName InstructorName
C1 Math Dr. Smith

Таблица Enrollments:

StudentID CourseID
1 C1

Нормальная форма Бойса-Кодда (BCNF):

Более строгая форма, чем 3NF, BCNF требует, чтобы каждый детерминант был кандидатом на первичный ключ. Это позволяет устранить некоторые аномалии, не охваченные 3NF.

Влияние нормализации:

  • Нормализация помогает поддерживать целостность данных, минимизируя избыточность и предотвращая аномалии обновлений.
  • Денормализация может улучшить производительность запросов, сократив необходимость сложных соединений, но может привести к избыточности и рискам несогласованности данных.

Компромиссы при проектировании базы данных:

Хотя нормализация улучшает целостность данных, денормализация может быть рассмотрена для оптимизации производительности в базах данных с интенсивным чтением, балансируя между эффективным извлечением данных и поддержанием согласованности данных.

0
SQL Новичок Опубликовано
© Skilio, 2025
Условия использования
Политика конфиденциальности
Мы используем файлы cookie, для персонализации сервисов и повышения удобства пользования сайтом. Если вы не согласны на их использование, поменяйте настройки браузера.