Что такое нормальные формы в базах данных?
Что проверяют
Понимаете ли вы, от каких проблем избавляет нормализация, и знаете ли, когда от неё осознанно отходят.
Как отвечать
Нормализация это приведение схемы к виду, где данные не дублируются, а каждый факт хранится ровно в одном месте. Борется она с тремя аномалиями: при вставке (нельзя добавить факт, не придумав лишние данные), при обновлении (изменили в одном месте, забыли в трёх других) и при удалении (удалили строку и потеряли не связанный с ней факт).
Формы по возрастанию:
- 1НФ: значения атомарны, нет списков в одной ячейке и нет повторяющихся групп колонок вроде
phone1,phone2,phone3. У строк есть первичный ключ; - 2НФ: 1НФ плюс нет частичной зависимости. Каждый неключевой атрибут зависит от всего составного ключа, а не от его части. Актуальна только при составном ключе;
- 3НФ: 2НФ плюс нет транзитивных зависимостей: неключевой атрибут не должен зависеть от другого неключевого. Классический пример это город и индекс, вычисляемые из адреса, лежащие в таблице заказов;
- НФБК (Бойса-Кодда): усиление 3НФ, где любой детерминант обязан быть потенциальным ключом. Отличие от 3НФ проявляется на редких схемах с несколькими перекрывающимися ключами.
На практике доводят до 3НФ, дальше по необходимости.
Обратная сторона: нормализованная схема требует соединений, и для тяжёлого чтения это дорого. Тогда идут на осознанную денормализацию: дублируют название в заказе, чтобы не соединять, держат счётчик комментариев в посте, строят отдельные витрины для аналитики. Цена всегда одна и та же, это риск рассинхронизации, поэтому денормализация допустима, когда есть ответ на вопрос «что обновляет копию и что будет, если оно не сработает».
Где спотыкаются
Перечисляют формы определениями, но не могут привести аномалию, от которой каждая спасает.
Считают 2НФ применимой при простом ключе.
Денормализуют заранее, до появления проблемы с производительностью.
Не могут объяснить, чем платят за денормализацию.