powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как сделать корзину покупателя?
22 сообщений из 22, страница 1 из 1
Как сделать корзину покупателя?
    #39185426
Gudsaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет парни, пришла весна, а это значит, что уже пора делать курсовую. Пока проектирую и сегодня столкнулся с интересной по моему мнению задачей: как сделать корзину покупателя?

Представьте что у вас есть прайс-лист, собственно в нём хранятся id товаров, цены, количество на складе.
Каким образом правильнее всего реализовать корзину покупателя , к примеру для того же интернет-магазина?
Я пока мало что соображаю в теме баз данных, особенно в теме реляционных, но всё же имею некоторое соображение на этот счёт.

Пока идея следующая:
с точки зрения механики я думаю, что для каждого покупателя есть смысл создавать свою таблицу которая и будет собственно корзиной: в данной таблице планирую хранить id товара, количество товара. Данную же таблицу (а мы получаем что-то по типу заказа) можно будет отправлять на тот же склад: как раз рабочим, взглянув в бд будет ясно что и сколько надо выгружать. Однако, идея такая себе - если у меня 8 млрд покупателей, то значит и 8 млрд таблиц (пусть даже я буду их удалять после успешной продажи товара).

Есть более рациональные предложения?

П.С. схемы бд нет, пока думаю про корзину. Планируется сделать процесс "нажал кнопку - забрал товар" и в рамках этого процесса стоит задача использовать: сайт, склад, пункт выдачи товара. Соответственно под всё нужно будет сделать с умом свои таблицы, связать их - получить бд - но пока всё по минимуму, по кирпичику.
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39185434
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GudsafЕсть более рациональные предложения?
Да: одна таблица на всех покупателей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39185445
Gudsaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovДа: одна таблица на всех покупателей.

Хорошо, как я пока представляю колонки данной таблицы: idПокупателя, idТовара, кол-во товара, время

Тогда такой вопрос: представим, что у нас параллельно собирают корзину 10 покупателей. Предположим, что таблица покупок заполняется неравномерно: сначала покупатель1 добавляет два товара, потом покупатель2 добавляет товар, потом покупатель1 добавляет ещё товар и т.д. Получается каша-малаша. Что теперь, выходит при формировании заказа и отправки его на склад (к примеру генерацией того же xml) надо грабить каждый раз эту несчастную таблицу на предмет получения заказов покупателя? Предположим так.

Тогда вопрос 2: выйдем за рамки курсового проекта: что, если у меня не 10 а 1000 покупателей и в один момент времени может быть одновременно несколько конкурирующих обращений к таблице. Как тогда обрабатывать обращения? Если нет возможности параллельной обработки таблицы, то надо выстраивать очередь - а это всегда плохо.
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39185465
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GudsafТогда вопрос 2: выйдем за рамки курсового проекта: что, если у меня не 10 а 1000 покупателей и в один момент времени может быть одновременно несколько конкурирующих обращений к таблице. Как тогда обрабатывать обращения? Если нет возможности параллельной обработки таблицы, то надо выстраивать очередь - а это всегда плохо.

А почему Вы думаете, что "нет возможности параллельной обработки таблицы"?
Это прекрасно разруливается сервером БД, гуглите "уровни изоляции транзакций".
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39185504
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Формально, "корзине покупателя" вообще нечего делать на сервере, до тех пор пока вы не превратите список желаемых товаров волшебной кнопочкой в заказ. Только на этом этапе товар может быть зарезервирован в БД, заодно можно получить отлуп, если каких-то товаров уже нет в магазине и будет дана возможность скорректировать заказ. После удачного прохождения этой процедуры данные заказа, включая ассортимент, цену и количество фиксируется в БД. А пока всё на стадии "а не купить ли мне...?" резервировать товар слишком накладно.
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39185730
Ну да
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gudsaf,
Вам рано писать подобные курсачи. Без обид.
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39185882
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gudsafс точки зрения механики я думаю, что для каждого покупателя есть смысл создавать свою таблицу которая и будет собственно корзиной: в данной таблице планирую хранить id товара, количество товара. Данную же таблицу (а мы получаем что-то по типу заказа) можно будет отправлять на тот же склад: как раз рабочим, взглянув в бд будет ясно что и сколько надо выгружать. Однако, идея такая себе - если у меня 8 млрд покупателей, то значит и 8 млрд таблиц (пусть даже я буду их удалять после успешной продажи товара).

Прикольно рассматривать БД с точки зрения физики... Ну хорошо будете удалять корзину после успешной продажи (естественно, что после успешной продажи с точки зрения механики товары перемещаются из корзины в пакеты покупателя и корзина остаётся на кассе). И даже если продажа будет неуспешной (кассовый аппарат сломался или во время расчёта цена оказалась иной чем на ценнике в торговом зале и это не устроило покупателя) можно договориться с покупателем, что делать с товаром в корзине: убирать обратно на полку или всё-таки покупатель отдаст за товар деньги. То есть корзину тоже понятно когда удалять: после того, как договорились с покупателем.

А вот если покупатель просто оставил корзину в торговом зале? С точки зрения механики она будет там стоять вечно...
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39186232
Gudsaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ChAФормально, "корзине покупателя" вообще нечего делать на сервере, до тех пор пока вы не превратите список желаемых товаров волшебной кнопочкой в заказ. Только на этом этапе товар может быть зарезервирован в БД, заодно можно получить отлуп, если каких-то товаров уже нет в магазине и будет дана возможность скорректировать заказ. После удачного прохождения этой процедуры данные заказа, включая ассортимент, цену и количество фиксируется в БД. А пока всё на стадии "а не купить ли мне...?" резервировать товар слишком накладно.

Весьма логично, но тогда где хранить выбор покупателя (перечень товаров которые он хочет купить) до создания заказа, до того момента когда будет нажата волшебная кнопочка и произойдёт формирование заказа в таблицах БД? в куках или как-то иначе?

Mr.FontaineНу хорошо будете удалять корзину после успешной продажи (естественно, что после успешной продажи с точки зрения механики товары перемещаются из корзины в пакеты покупателя и корзина остаётся на кассе). И даже если продажа будет неуспешной (кассовый аппарат сломался или во время расчёта цена оказалась иной чем на ценнике в торговом зале и это не устроило покупателя) можно договориться с покупателем, что делать с товаром в корзине: убирать обратно на полку или всё-таки покупатель отдаст за товар деньги. То есть корзину тоже понятно когда удалять: после того, как договорились с покупателем.

А вот если покупатель просто оставил корзину в торговом зале? С точки зрения механики она будет там стоять вечно...

Чистить через N-времени, хотя если вернуться опять же к кукам, то пусть он в своём браузере всё чистит сам, мы будем отрабатывать лишь волшебное нажатие кнопки. А что ещё кроме записи корзины в куках до нажатия волшебной кнопки практикуют программисты?
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39187022
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gudsafс точки зрения механики я думаю, что для каждого покупателя есть смысл создавать свою таблицу которая и будет собственно корзиной: в данной таблице планирую хранить id товара, количество товара. Данную же таблицу (а мы получаем что-то по типу заказа) можно будет отправлять на тот же склад: как раз рабочим, взглянув в бд будет ясно что и сколько надо выгружать. Однако, идея такая себе - если у меня 8 млрд покупателей, то значит и 8 млрд таблиц (пусть даже я буду их удалять после успешной продажи товара).
GudsafТогда такой вопрос: представим, что у нас параллельно собирают корзину 10 покупателей. Предположим, что таблица покупок заполняется неравномерно: сначала покупатель1 добавляет два товара, потом покупатель2 добавляет товар, потом покупатель1 добавляет ещё товар и т.д. Получается каша-малаша. Что теперь, выходит при формировании заказа и отправки его на склад (к примеру генерацией того же xml) надо грабить каждый раз эту несчастную таблицу на предмет получения заказов покупателя?Жесть.

Для хранения документа нужно по одному жёсткому диску для каждого слова.

Ведь иначе на диске будет каша-малаша, все слова перепутаются, текст испортится - ведь слова должны быть по порядку.
И ещё для вывода всего текста на экран нужно грабить этот несчастный диск для каждого слова, и он сломается. А если выводить только одно слово на экране, то текст неудобно будет читать.
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39187025
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAФормально, "корзине покупателя" вообще нечего делать на сервере, до тех пор пока вы не превратите список желаемых товаров волшебной кнопочкой в заказ. Только на этом этапе товар может быть зарезервирован в БД, заодно можно получить отлуп, если каких-то товаров уже нет в магазине и будет дана возможность скорректировать заказ. После удачного прохождения этой процедуры данные заказа, включая ассортимент, цену и количество фиксируется в БД. А пока всё на стадии "а не купить ли мне...?" резервировать товар слишком накладно.Обычно получается так, что дешевле и проще делать одну структуру и для корзины, и для заказа.

Иначе получится тупо две совершенно одинаковых структуры, и два набора совершенно одинакового кода для работы с ней.
А в случае "куков", или подобных отличающихся от хранилища заказов механизмов - ещё и разные методы работы с хранилищем данных для этих двух одинаковых структур данных.

Проще сделать стандартную двухтабличную структуру "Заголовок заказа" - "детали заказа", и использовать её везде.
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39187056
Вадиман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgChAФормально, "корзине покупателя" вообще нечего делать на сервере, до тех пор пока вы не превратите список желаемых товаров волшебной кнопочкой в заказ. Только на этом этапе товар может быть зарезервирован в БД, заодно можно получить отлуп, если каких-то товаров уже нет в магазине и будет дана возможность скорректировать заказ. После удачного прохождения этой процедуры данные заказа, включая ассортимент, цену и количество фиксируется в БД. А пока всё на стадии "а не купить ли мне...?" резервировать товар слишком накладно.Обычно получается так, что дешевле и проще делать одну структуру и для корзины, и для заказа.

Иначе получится тупо две совершенно одинаковых структуры, и два набора совершенно одинакового кода для работы с ней.
А в случае "куков", или подобных отличающихся от хранилища заказов механизмов - ещё и разные методы работы с хранилищем данных для этих двух одинаковых структур данных.

Проще сделать стандартную двухтабличную структуру "Заголовок заказа" - "детали заказа", и использовать её везде.
Корзина (пред-заказ) и оформленный заказ - это разные понятия, которым присущи разные атрибуты. Например, "оплачен/забронирован". Вы предлагаете хранить NULL для товаров из корзины? А реляционная теория NULLs не любит. А мы тут вроде про проектирование говорим, т.е. про принципиальные и идеологические вопросы.
А еще могут быть внешние ключи на дочерние сущности. И как для обеспечения целостности на уровне БД определить, к какой записи в таблице можно привязать дочку (скажем, наряд на отгрузку), а к какой - нельзя, потому что это всего лишь предзаказ? Делать составной ключ, включающий некое поле "СТАТУС", и на дочерней таблице вешать CHECK CONSTRAINT на это поле?

И самое главное различие заключается в том, что по своей природе корзина - это транзитная очередь. Она наполняется и опустошается. А оформленный заказ - это история, влитая в гранит. Одного этого достаточно, чтобы разделить эти понятия. Делается ли физическое удаление записи из очереди (корзины) или просто пометка - суть не в этом. Для оформленного заказа статус "актуален" неприменим, как бы он ни реализовывался.
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39187058
Вадиман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAФормально, "корзине покупателя" вообще нечего делать на сервере, до тех пор пока вы не превратите список желаемых товаров волшебной кнопочкой в заказ. Только на этом этапе товар может быть зарезервирован в БД, заодно можно получить отлуп, если каких-то товаров уже нет в магазине и будет дана возможность скорректировать заказ. После удачного прохождения этой процедуры данные заказа, включая ассортимент, цену и количество фиксируется в БД. А пока всё на стадии "а не купить ли мне...?" резервировать товар слишком накладно.
Почему это нечего делать в БД? Корзина - это результат действий пользователя, зарегистрированного в БД, которые структурированы и подлежат анализу. Например, по наличию записей в корзине можно делать выводы, чем интересуется клиент, и что ему предложить в следующий раз.
Просто речь идет о сущности, отдельной от сущности "заказ". Назовем это "Желания клиента".
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39187059
Вадиман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анализ предпочтений клиента лучше по оформленным заказам делать, так что мой пример был неудачным. В любом случае, это некая информация, которая в ряде случаев может иметь важное значение. Например, корзина растет по всем покупателям, а заказы не оформляются. Почему? А может, не успевают оформлять, товар у них из-под рук выдергивают. Вывод - мало товара, нужно на складе иметь больше. Или хреново реализован механизм бронирования. Может быть, есть какие-то проблемы с оплатой на сайте, и народ бросает заполненные корзины, не доводя покупку до конца.
Все это дает возможность анализа в разных разрезах. Нет информации - нет анализа. Сиди и догадывайся.
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39187291
Pulsar_p
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gudsaf как сделать корзину покупателя?

Если в учебных целях и СУБД MS SQL, то там есть подобное в учебных базах. Что-то типа этого: тынц
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39187676
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВадиманА еще могут быть внешние ключи на дочерние сущности. И как для обеспечения целостности на уровне БД определить, к какой записи в таблице можно привязать дочку (скажем, наряд на отгрузку), а к какой - нельзя, потому что это всего лишь предзаказ? Делать составной ключ, включающий некое поле "СТАТУС", и на дочерней таблице вешать CHECK CONSTRAINT на это поле?Это уж самая мелочь.
У заказа тоже могут быть куча состояний, когда он не допускает "привязать новый наряд на отгрузку". Например, когда он давно, много лет назад, закрыт, всё давно отгружено и оплачено.

ВадиманКорзина (пред-заказ) и оформленный заказ - это разные понятия, которым присущи разные атрибуты. Например, "оплачен/забронирован". Вы предлагаете хранить NULL для товаров из корзины? А реляционная теория NULLs не любит. А мы тут вроде про проектирование говорим, т.е. про принципиальные и идеологические вопросы.Вот идея в том, что корзины - более сложная вещь, чем кажется на первый взгляд.
Реализуются всякие алгоритмы, например, кратковременное бронирование на момент работы с корзиной, бывает, на уровне работы с корзиной нужно поговорить с менеджером по её содержимому, бывает, что корзин несколько, ну и так далее.
И грань между сверкающими сферическо-чистыми заказом и корзиной размываются, оттеняясь множеством полутонов.

ВадиманИ самое главное различие заключается в том, что по своей природе корзина - это транзитная очередь. Она наполняется и опустошается. А оформленный заказ - это история, влитая в гранит. Одного этого достаточно, чтобы разделить эти понятия.А можно по другому.
А корзину не надо в гранит? У нас, я помню, и история изменений и просмотров корзины была в граните (тем более что при просмотрах состав корзины меняется, как вы понимаете, особенно цены товаров, но и сами товары тоже).
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39187708
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GudsafХорошо, как я пока представляю колонки данной таблицы: idПокупателя, idТовара, кол-во товара, время

Для курсовой этого достаточно, нужно только добавить дату (время без даты что тампон без ваты), и статус типа 0-это еще лежит в корзине, 1 - уже в обработке, 2 - уже выдано (примерно так)...

GudsafТогда такой вопрос: представим, что у нас параллельно собирают корзину 10 покупателей. Предположим, что таблица покупок заполняется неравномерно: сначала покупатель1 добавляет два товара, потом покупатель2 добавляет товар, потом покупатель1 добавляет ещё товар и т.д. Получается каша-малаша. Что теперь, выходит при формировании заказа и отправки его на склад (к примеру генерацией того же xml) надо грабить каждый раз эту несчастную таблицу на предмет получения заказов покупателя? Предположим так.

Попросите у ботана конспект (если на лекциях спали) и прочтите там материал на тему "Запросы"
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39203457
Kabaev Sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Грешно издеваться над больными людьми (с) :)

Gudsaf,

User
- Id
- Name

Goods
- Id
- Name
- Price

OrderState
- Id
- Name (Заказ формируется, Заказ оплачен, Заказ отгружен, Заказ удален)

Order
- Id
- UserId
- OrderStateId

OrderLine
- Id
- OrderId
- GoodsId
- GoodsQnt
- GoodsPrice
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39203464
Kabaev Sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще
OrderHistory
- Id
- OrderId,
- OldOrderStateId
- NewOrderStateId
- ChangingDate
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39203637
Serguei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kabaev SergeyGoods
- Id
- Name
- Price

Ну все таки наверное стоит разрешить цене изменяться со временем. Цена отдельная таблица:

Goods_Price
ID_goods
DateStart
DateFinish
Price
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39204038
Kabaev Sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я протестую :)
Цена и так может меняться. В OrderLine есть GoodsPrice - оно там не просто так, оно там с умыслом :)
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39205695
Serguei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kabaev SergeyЯ протестую :)
Цена и так может меняться. В OrderLine есть GoodsPrice - оно там не просто так, оно там с умыслом :)

OrderLine это по какой цене вы продали товар. Плохой совет даете.
...
Рейтинг: 0 / 0
Как сделать корзину покупателя?
    #39206199
Kabaev Sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дык я ж не предлагаю цену в заказе менять.
В данном случае это минимальный вариант для развязывания цены в прайсе с ценой в заказе.
Вряд ли топикстартеру нужна еще и система хранения истории изменения цен прайса.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как сделать корзину покупателя?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]