|
|
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
Привет парни, пришла весна, а это значит, что уже пора делать курсовую. Пока проектирую и сегодня столкнулся с интересной по моему мнению задачей: как сделать корзину покупателя? Представьте что у вас есть прайс-лист, собственно в нём хранятся id товаров, цены, количество на складе. Каким образом правильнее всего реализовать корзину покупателя , к примеру для того же интернет-магазина? Я пока мало что соображаю в теме баз данных, особенно в теме реляционных, но всё же имею некоторое соображение на этот счёт. Пока идея следующая: с точки зрения механики я думаю, что для каждого покупателя есть смысл создавать свою таблицу которая и будет собственно корзиной: в данной таблице планирую хранить id товара, количество товара. Данную же таблицу (а мы получаем что-то по типу заказа) можно будет отправлять на тот же склад: как раз рабочим, взглянув в бд будет ясно что и сколько надо выгружать. Однако, идея такая себе - если у меня 8 млрд покупателей, то значит и 8 млрд таблиц (пусть даже я буду их удалять после успешной продажи товара). Есть более рациональные предложения? П.С. схемы бд нет, пока думаю про корзину. Планируется сделать процесс "нажал кнопку - забрал товар" и в рамках этого процесса стоит задача использовать: сайт, склад, пункт выдачи товара. Соответственно под всё нужно будет сделать с умом свои таблицы, связать их - получить бд - но пока всё по минимуму, по кирпичику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2016, 22:13 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
GudsafЕсть более рациональные предложения? Да: одна таблица на всех покупателей. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2016, 22:25 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovДа: одна таблица на всех покупателей. Хорошо, как я пока представляю колонки данной таблицы: idПокупателя, idТовара, кол-во товара, время Тогда такой вопрос: представим, что у нас параллельно собирают корзину 10 покупателей. Предположим, что таблица покупок заполняется неравномерно: сначала покупатель1 добавляет два товара, потом покупатель2 добавляет товар, потом покупатель1 добавляет ещё товар и т.д. Получается каша-малаша. Что теперь, выходит при формировании заказа и отправки его на склад (к примеру генерацией того же xml) надо грабить каждый раз эту несчастную таблицу на предмет получения заказов покупателя? Предположим так. Тогда вопрос 2: выйдем за рамки курсового проекта: что, если у меня не 10 а 1000 покупателей и в один момент времени может быть одновременно несколько конкурирующих обращений к таблице. Как тогда обрабатывать обращения? Если нет возможности параллельной обработки таблицы, то надо выстраивать очередь - а это всегда плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2016, 22:35 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
GudsafТогда вопрос 2: выйдем за рамки курсового проекта: что, если у меня не 10 а 1000 покупателей и в один момент времени может быть одновременно несколько конкурирующих обращений к таблице. Как тогда обрабатывать обращения? Если нет возможности параллельной обработки таблицы, то надо выстраивать очередь - а это всегда плохо. А почему Вы думаете, что "нет возможности параллельной обработки таблицы"? Это прекрасно разруливается сервером БД, гуглите "уровни изоляции транзакций". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2016, 23:14 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
Формально, "корзине покупателя" вообще нечего делать на сервере, до тех пор пока вы не превратите список желаемых товаров волшебной кнопочкой в заказ. Только на этом этапе товар может быть зарезервирован в БД, заодно можно получить отлуп, если каких-то товаров уже нет в магазине и будет дана возможность скорректировать заказ. После удачного прохождения этой процедуры данные заказа, включая ассортимент, цену и количество фиксируется в БД. А пока всё на стадии "а не купить ли мне...?" резервировать товар слишком накладно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2016, 02:06 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
Gudsaf, Вам рано писать подобные курсачи. Без обид. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2016, 11:16 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
Gudsafс точки зрения механики я думаю, что для каждого покупателя есть смысл создавать свою таблицу которая и будет собственно корзиной: в данной таблице планирую хранить id товара, количество товара. Данную же таблицу (а мы получаем что-то по типу заказа) можно будет отправлять на тот же склад: как раз рабочим, взглянув в бд будет ясно что и сколько надо выгружать. Однако, идея такая себе - если у меня 8 млрд покупателей, то значит и 8 млрд таблиц (пусть даже я буду их удалять после успешной продажи товара). Прикольно рассматривать БД с точки зрения физики... Ну хорошо будете удалять корзину после успешной продажи (естественно, что после успешной продажи с точки зрения механики товары перемещаются из корзины в пакеты покупателя и корзина остаётся на кассе). И даже если продажа будет неуспешной (кассовый аппарат сломался или во время расчёта цена оказалась иной чем на ценнике в торговом зале и это не устроило покупателя) можно договориться с покупателем, что делать с товаром в корзине: убирать обратно на полку или всё-таки покупатель отдаст за товар деньги. То есть корзину тоже понятно когда удалять: после того, как договорились с покупателем. А вот если покупатель просто оставил корзину в торговом зале? С точки зрения механики она будет там стоять вечно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2016, 13:27 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
ChAФормально, "корзине покупателя" вообще нечего делать на сервере, до тех пор пока вы не превратите список желаемых товаров волшебной кнопочкой в заказ. Только на этом этапе товар может быть зарезервирован в БД, заодно можно получить отлуп, если каких-то товаров уже нет в магазине и будет дана возможность скорректировать заказ. После удачного прохождения этой процедуры данные заказа, включая ассортимент, цену и количество фиксируется в БД. А пока всё на стадии "а не купить ли мне...?" резервировать товар слишком накладно. Весьма логично, но тогда где хранить выбор покупателя (перечень товаров которые он хочет купить) до создания заказа, до того момента когда будет нажата волшебная кнопочка и произойдёт формирование заказа в таблицах БД? в куках или как-то иначе? Mr.FontaineНу хорошо будете удалять корзину после успешной продажи (естественно, что после успешной продажи с точки зрения механики товары перемещаются из корзины в пакеты покупателя и корзина остаётся на кассе). И даже если продажа будет неуспешной (кассовый аппарат сломался или во время расчёта цена оказалась иной чем на ценнике в торговом зале и это не устроило покупателя) можно договориться с покупателем, что делать с товаром в корзине: убирать обратно на полку или всё-таки покупатель отдаст за товар деньги. То есть корзину тоже понятно когда удалять: после того, как договорились с покупателем. А вот если покупатель просто оставил корзину в торговом зале? С точки зрения механики она будет там стоять вечно... Чистить через N-времени, хотя если вернуться опять же к кукам, то пусть он в своём браузере всё чистит сам, мы будем отрабатывать лишь волшебное нажатие кнопки. А что ещё кроме записи корзины в куках до нажатия волшебной кнопки практикуют программисты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2016, 21:06 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
Gudsafс точки зрения механики я думаю, что для каждого покупателя есть смысл создавать свою таблицу которая и будет собственно корзиной: в данной таблице планирую хранить id товара, количество товара. Данную же таблицу (а мы получаем что-то по типу заказа) можно будет отправлять на тот же склад: как раз рабочим, взглянув в бд будет ясно что и сколько надо выгружать. Однако, идея такая себе - если у меня 8 млрд покупателей, то значит и 8 млрд таблиц (пусть даже я буду их удалять после успешной продажи товара). GudsafТогда такой вопрос: представим, что у нас параллельно собирают корзину 10 покупателей. Предположим, что таблица покупок заполняется неравномерно: сначала покупатель1 добавляет два товара, потом покупатель2 добавляет товар, потом покупатель1 добавляет ещё товар и т.д. Получается каша-малаша. Что теперь, выходит при формировании заказа и отправки его на склад (к примеру генерацией того же xml) надо грабить каждый раз эту несчастную таблицу на предмет получения заказов покупателя?Жесть. Для хранения документа нужно по одному жёсткому диску для каждого слова. Ведь иначе на диске будет каша-малаша, все слова перепутаются, текст испортится - ведь слова должны быть по порядку. И ещё для вывода всего текста на экран нужно грабить этот несчастный диск для каждого слова, и он сломается. А если выводить только одно слово на экране, то текст неудобно будет читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 23:36 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
ChAФормально, "корзине покупателя" вообще нечего делать на сервере, до тех пор пока вы не превратите список желаемых товаров волшебной кнопочкой в заказ. Только на этом этапе товар может быть зарезервирован в БД, заодно можно получить отлуп, если каких-то товаров уже нет в магазине и будет дана возможность скорректировать заказ. После удачного прохождения этой процедуры данные заказа, включая ассортимент, цену и количество фиксируется в БД. А пока всё на стадии "а не купить ли мне...?" резервировать товар слишком накладно.Обычно получается так, что дешевле и проще делать одну структуру и для корзины, и для заказа. Иначе получится тупо две совершенно одинаковых структуры, и два набора совершенно одинакового кода для работы с ней. А в случае "куков", или подобных отличающихся от хранилища заказов механизмов - ещё и разные методы работы с хранилищем данных для этих двух одинаковых структур данных. Проще сделать стандартную двухтабличную структуру "Заголовок заказа" - "детали заказа", и использовать её везде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 23:42 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
alexeyvgChAФормально, "корзине покупателя" вообще нечего делать на сервере, до тех пор пока вы не превратите список желаемых товаров волшебной кнопочкой в заказ. Только на этом этапе товар может быть зарезервирован в БД, заодно можно получить отлуп, если каких-то товаров уже нет в магазине и будет дана возможность скорректировать заказ. После удачного прохождения этой процедуры данные заказа, включая ассортимент, цену и количество фиксируется в БД. А пока всё на стадии "а не купить ли мне...?" резервировать товар слишком накладно.Обычно получается так, что дешевле и проще делать одну структуру и для корзины, и для заказа. Иначе получится тупо две совершенно одинаковых структуры, и два набора совершенно одинакового кода для работы с ней. А в случае "куков", или подобных отличающихся от хранилища заказов механизмов - ещё и разные методы работы с хранилищем данных для этих двух одинаковых структур данных. Проще сделать стандартную двухтабличную структуру "Заголовок заказа" - "детали заказа", и использовать её везде. Корзина (пред-заказ) и оформленный заказ - это разные понятия, которым присущи разные атрибуты. Например, "оплачен/забронирован". Вы предлагаете хранить NULL для товаров из корзины? А реляционная теория NULLs не любит. А мы тут вроде про проектирование говорим, т.е. про принципиальные и идеологические вопросы. А еще могут быть внешние ключи на дочерние сущности. И как для обеспечения целостности на уровне БД определить, к какой записи в таблице можно привязать дочку (скажем, наряд на отгрузку), а к какой - нельзя, потому что это всего лишь предзаказ? Делать составной ключ, включающий некое поле "СТАТУС", и на дочерней таблице вешать CHECK CONSTRAINT на это поле? И самое главное различие заключается в том, что по своей природе корзина - это транзитная очередь. Она наполняется и опустошается. А оформленный заказ - это история, влитая в гранит. Одного этого достаточно, чтобы разделить эти понятия. Делается ли физическое удаление записи из очереди (корзины) или просто пометка - суть не в этом. Для оформленного заказа статус "актуален" неприменим, как бы он ни реализовывался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2016, 07:38 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
ChAФормально, "корзине покупателя" вообще нечего делать на сервере, до тех пор пока вы не превратите список желаемых товаров волшебной кнопочкой в заказ. Только на этом этапе товар может быть зарезервирован в БД, заодно можно получить отлуп, если каких-то товаров уже нет в магазине и будет дана возможность скорректировать заказ. После удачного прохождения этой процедуры данные заказа, включая ассортимент, цену и количество фиксируется в БД. А пока всё на стадии "а не купить ли мне...?" резервировать товар слишком накладно. Почему это нечего делать в БД? Корзина - это результат действий пользователя, зарегистрированного в БД, которые структурированы и подлежат анализу. Например, по наличию записей в корзине можно делать выводы, чем интересуется клиент, и что ему предложить в следующий раз. Просто речь идет о сущности, отдельной от сущности "заказ". Назовем это "Желания клиента". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2016, 07:48 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
Анализ предпочтений клиента лучше по оформленным заказам делать, так что мой пример был неудачным. В любом случае, это некая информация, которая в ряде случаев может иметь важное значение. Например, корзина растет по всем покупателям, а заказы не оформляются. Почему? А может, не успевают оформлять, товар у них из-под рук выдергивают. Вывод - мало товара, нужно на складе иметь больше. Или хреново реализован механизм бронирования. Может быть, есть какие-то проблемы с оплатой на сайте, и народ бросает заполненные корзины, не доводя покупку до конца. Все это дает возможность анализа в разных разрезах. Нет информации - нет анализа. Сиди и догадывайся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2016, 07:53 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
Gudsaf как сделать корзину покупателя? Если в учебных целях и СУБД MS SQL, то там есть подобное в учебных базах. Что-то типа этого: тынц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2016, 19:31 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
ВадиманА еще могут быть внешние ключи на дочерние сущности. И как для обеспечения целостности на уровне БД определить, к какой записи в таблице можно привязать дочку (скажем, наряд на отгрузку), а к какой - нельзя, потому что это всего лишь предзаказ? Делать составной ключ, включающий некое поле "СТАТУС", и на дочерней таблице вешать CHECK CONSTRAINT на это поле?Это уж самая мелочь. У заказа тоже могут быть куча состояний, когда он не допускает "привязать новый наряд на отгрузку". Например, когда он давно, много лет назад, закрыт, всё давно отгружено и оплачено. ВадиманКорзина (пред-заказ) и оформленный заказ - это разные понятия, которым присущи разные атрибуты. Например, "оплачен/забронирован". Вы предлагаете хранить NULL для товаров из корзины? А реляционная теория NULLs не любит. А мы тут вроде про проектирование говорим, т.е. про принципиальные и идеологические вопросы.Вот идея в том, что корзины - более сложная вещь, чем кажется на первый взгляд. Реализуются всякие алгоритмы, например, кратковременное бронирование на момент работы с корзиной, бывает, на уровне работы с корзиной нужно поговорить с менеджером по её содержимому, бывает, что корзин несколько, ну и так далее. И грань между сверкающими сферическо-чистыми заказом и корзиной размываются, оттеняясь множеством полутонов. ВадиманИ самое главное различие заключается в том, что по своей природе корзина - это транзитная очередь. Она наполняется и опустошается. А оформленный заказ - это история, влитая в гранит. Одного этого достаточно, чтобы разделить эти понятия.А можно по другому. А корзину не надо в гранит? У нас, я помню, и история изменений и просмотров корзины была в граните (тем более что при просмотрах состав корзины меняется, как вы понимаете, особенно цены товаров, но и сами товары тоже). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2016, 22:38 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
GudsafХорошо, как я пока представляю колонки данной таблицы: idПокупателя, idТовара, кол-во товара, время Для курсовой этого достаточно, нужно только добавить дату (время без даты что тампон без ваты), и статус типа 0-это еще лежит в корзине, 1 - уже в обработке, 2 - уже выдано (примерно так)... GudsafТогда такой вопрос: представим, что у нас параллельно собирают корзину 10 покупателей. Предположим, что таблица покупок заполняется неравномерно: сначала покупатель1 добавляет два товара, потом покупатель2 добавляет товар, потом покупатель1 добавляет ещё товар и т.д. Получается каша-малаша. Что теперь, выходит при формировании заказа и отправки его на склад (к примеру генерацией того же xml) надо грабить каждый раз эту несчастную таблицу на предмет получения заказов покупателя? Предположим так. Попросите у ботана конспект (если на лекциях спали) и прочтите там материал на тему "Запросы" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2016, 23:53 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
Грешно издеваться над больными людьми (с) :) Gudsaf, User - Id - Name Goods - Id - Name - Price OrderState - Id - Name (Заказ формируется, Заказ оплачен, Заказ отгружен, Заказ удален) Order - Id - UserId - OrderStateId OrderLine - Id - OrderId - GoodsId - GoodsQnt - GoodsPrice ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2016, 17:24 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
Еще OrderHistory - Id - OrderId, - OldOrderStateId - NewOrderStateId - ChangingDate ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2016, 17:27 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
Kabaev SergeyGoods - Id - Name - Price Ну все таки наверное стоит разрешить цене изменяться со временем. Цена отдельная таблица: Goods_Price ID_goods DateStart DateFinish Price ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2016, 20:46 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
Я протестую :) Цена и так может меняться. В OrderLine есть GoodsPrice - оно там не просто так, оно там с умыслом :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2016, 13:08 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
Kabaev SergeyЯ протестую :) Цена и так может меняться. В OrderLine есть GoodsPrice - оно там не просто так, оно там с умыслом :) OrderLine это по какой цене вы продали товар. Плохой совет даете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2016, 09:20 |
|
||
|
Как сделать корзину покупателя?
|
|||
|---|---|---|---|
|
#18+
Дык я ж не предлагаю цену в заказе менять. В данном случае это минимальный вариант для развязывания цены в прайсе с ценой в заказе. Вряд ли топикстартеру нужна еще и система хранения истории изменения цен прайса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2016, 16:13 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=39203637&tid=1540367]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
14ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 256ms |
| total: | 418ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...