Выбор ответа Middle Проектирование и нормализация обновлено

Цена в позиции заказа

Вопрос

В order_items хранится price, хотя цена есть и в products. Как это оценить?

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

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

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

Коротко

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

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

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

Разбор

Цена товара меняется, а сумма старого заказа меняться не должна. Поэтому order_items.price хранит исторический факт сделки, а не копию текущей цены, и нормализацию не нарушает. Если брать цену JOIN-ом из products, после подорожания изменятся все прошлые заказы и чеки. 1НФ касается атомарности значений и тут ни при чём.

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

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