Нужна помощь в оформлении таблицы базы данных с корзиной - PullRequest
1 голос
/ 03 марта 2011

Предположим, у меня есть таблицы

Products  -------product_id , name , price , size

shopping_cart------cart_id,item_id,user_id,quantity

order----order_id , user_id ,totalprice , date

orderHistory---------user_id , item_id,date,order_id

Я запутался, как хранить историю покупок, потому что если я храню item_id, то может быть вероятность того, что какой-то продукт может быть удален, тогда что я должен отобразить вистория.

Существует вероятность того, что цена, размер, другое измерение этого продукта со временем изменятся, но в истории я не хочу менять

, поэтому как мне проектировать базу данных

Ответы [ 3 ]

1 голос
/ 04 марта 2011

При возникновении проблемы с удалением продукта попробуйте добавить что-то вроде «активного» (логического) поля в таблицу продуктов. Таким образом, вам не нужно физически удалять продукты, просто деактивировать их. Затем вы можете построить свой код так, чтобы неактивные продукты не отображались в каталоге, но они все еще были доступны в вашей базе данных для отображения в разделе истории заказов.

Я предполагаю, что вы пытаетесь создать что-то вроде таблицы "OrderLine" с вашей таблицей OrderHistory. Вам нужно только связать это с продуктами и таблицами заголовка заказа (Order), вам не нужно связывать его с пользователями, так как таблица заголовка заказа уже связана с пользователем. Если вы добавите некоторые дополнительные поля, такие как «количество» и «цена», в таблицу OrderLine, то вы можете создать моментальный снимок при размещении заказа и вставить цену (в момент заказа) и количество заказа в историю заказов. Таблица. Таким образом, если цена продукта изменяется с течением времени, информация в таблице OrderLine остается прежней, и у вас остается первоначальная цена.

Вы все еще могли бы создать некоторые объекты для сохранения истории продукта (цены и т. Д.), Если хотите удерживать их для отображения ценовых трендов, но с точки зрения сохранения информации о вашем фактическом заказе это не требуется.

Этот подход означает, что ваша таблица корзины покупок может использоваться в качестве хранилища «в процессе», где вы храните только текущие корзины, а после завершения заказа корзина очищается, и данные вставляются в заголовки и таблицы строк заказа. .

Это не охватывает все, но, надеюсь, даст вам некоторые идеи о подходах, которые вы могли бы принять в отношении ваших вопросов.

0 голосов
/ 03 марта 2011

По моему мнению, у вас должна быть таблица между заказом и продуктом, в которой вы можете хранить информацию о заказе и продукте.Вы можете использовать таблицу истории заказов для этой цели.Просто сохраните информацию о времени совершения покупок в этой таблице.По моему мнению, это хорошая практика.

Даже если фактические значения изменяются в таблице продуктов, вам не нужно менять значения в таблице истории заказов.Просто дотроньтесь до этой таблицы только в тот момент, когда пользователь совершает какие-то покупки, в противном случае вам это не нужно.

Я также предлагаю вам создать таблицу клиентов и сохранить информацию о клиентах в этой таблице, а также использовать идентификатор клиента в таблице истории заказов.Это поможет вам классифицировать историю даже по отношению к клиенту

0 голосов
/ 03 марта 2011

Я сталкиваюсь с той же проблемой прямо сейчас, и я решаю ее в основном путем дублирования соответствующих данных во вторичную таблицу, которую могут просматривать модели истории заказов. Они никогда не изменятся и никогда не будут удалены.

Таким образом, если изменятся цены или названия, у вас будет моментальный снимок во время заказа.

Другим способом было бы создание версий продуктов и сохранение определенного идентификатора версии. При изменении продукта отображаемая версия обновляется до новейшего идентификатора продукта.

В любом случае, вы дублируете историю.

...