F-ES Sitecore
Обычно вы сохраняете только идентификатор, и всякий раз, когда вы хотите показать basked, вы присоединяетесь к своей Корзинной таблице в таблице Product на ID, эффективно создавая виртуальную таблицу, которая имеет все поля из обеих таблиц, так что теперь вы можете получить доступ к названию продукта и т. д
SELECT * FROM Basket B JOIN Product P on B.ProductID = P.ID
Однако для корзины вы можете скопировать такие вещи, как цена, в свою таблицу корзины. Поэтому, когда он добавляется в корзину, храните идентификатор продукта, но также и цену. Причина этого заключается в том, что цена меняется. Если это было "10 фунтов", когда я добавил его в свою корзину, и цена изменилась, он все равно должен быть указан как "10 фунтов" в моей корзине, поскольку вы заключаете контракт с клиентом, когда он добавляет что-то в свою корзину, что он покупает этот товар по этой цене.
Таким образом, чтобы показать свою корзину, вы все равно сделаете соединение, но название продукта, описание и т. д. будут взяты из таблицы продуктов (P.Name, P. Описание В приведенном выше запросе), но вы получите цену из таблицы корзины (B. Price).
Richard Deeming
"...вы заключаете контракт с клиентом, когда он добавляет что-то в свою корзину, что он покупает этот товар по этой цене."
Я знаю, но не думаю, что это правильно. Если клиент кладет что-то в свою корзину сегодня, а затем возвращается на следующей неделе, чтобы проверить, я не думаю, что неразумно ожидать, что он заплатит текущую цену. "Контракт" происходит в тот момент, когда они выписываются.
F-ES Sitecore
Я не сказал "юридический контракт". В мире электронной коммерции принято считать, что, когда вы добавляете товар в корзину, вы обещаете клиенту этот товар по этой цене (если это возможно), и действовать иначе было бы неэтично. Не противозаконно, но неэтично.