Выбор ответа Middle ER-модели и нормализация обновлено

Цена в строке заказа

Вопрос

В order_items хранится price, хотя цена есть и в products. Это ошибка нормализации?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Нет: это цена на момент заказа, она не должна меняться. Цена в строке заказа и цена в каталоге это разные факты: «за сколько продали» и «сколько стоит сейчас».

Варианты ответа

  1. Нет: денормализация всегда допустима, если ускоряет чтение
  2. Нет: это цена на момент заказа, она не должна менятьсяправильный ответ
  3. Да: нарушена 3НФ, цена зависит от product_id транзитивно
  4. Да: нарушена 2НФ, цену нужно брать только из products

Разбор

Цена в строке заказа и цена в каталоге это разные факты: «за сколько продали» и «сколько стоит сейчас». Если брать цену из products, после подорожания изменятся суммы старых заказов. Поэтому формально похоже на дублирование, но по смыслу это отдельный атрибут. «Денормализация всегда допустима» неверно: у неё есть цена согласованности.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.