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