#core-data #parent-child #shopping-cart
#основные данные #родитель-потомок #корзина покупок
Вопрос:
Прямо сейчас у меня есть (удаляя то, что не важно для этого вопроса) следующие 3 объекта. (У меня недостаточно репутации для добавления изображений, извините за ascii)
------------ --------------- ----------------
| Product | | CartProduct | | Cart |
------------ --------------- ----------------
| name | | quantity | | total |
| detail | | otherStuff | | subTotal |
| minimumBuy | --------------- | taxes |
| price | | onCart <---------- | taxesPercentaje|
| thumb | --------------- | ----------------
------------ -------> product |
----------------
Итак, у меня есть объект product с информацией о продукте, объект CartProduct, который добавляет некоторую информацию и количество этого продукта, который у нас есть в корзине (и является дочерним объектом из Product) и, наконец, корзина.
В спецификациях говорится, что мне нужно архивировать корзины по завершении покупки с продуктами в том виде, в каком они есть на момент продажи, поэтому, даже если в будущем цена продукта изменится, мне нужно, чтобы цены на «товары в корзине» оставались такими, какие они есть.
До сих пор у меня были продукты и связанные с ними продукты, но, видя, что мне нужно сохранить состояние корзины для дальнейшего использования, я не знаю, как лучше поступить.
TL; DR: Устанавливаю ли я связь между продуктами в корзине и продуктами или я просто копирую данные в новую сущность в момент «добавления товаров в корзину», зная, что мне нужно сохранить состояние товара в корзине таким, каким оно было при покупке?
Ответ №1:
Похоже, что либо хотя бы часть данных необходимо денормализовать (т. Е. Скопировать), либо вам нужно придумать решение для управления версиями и иметь новые версии продуктов при внесении изменений. Последнее звучит слишком запутанно для меня и не поддерживается в долгосрочной перспективе, поэтому денормализация звучит как лучшее решение.
Комментарии:
1. Спасибо, да, я так и думал, я буду денормализовывать продукты, я думаю, что это самое простое решение прямо сейчас.