Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Проектирование БД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6 7   вперед  Ctrl      все
 Re: Реляционка тут бессильна?  [new]
hVostt
Member

Откуда:
Сообщений: 11784
tip78
status smallint default 1,      -- статус заказа: 1 корзина; 2 оформлен; 4 подтверждён; 8 отказ; 16 собран; 32 передан курьеру; 64 доставлен; 128 оплачен;


Ну ясно. Студенты, не имеющие ни грамма реального опыта, балуются с флагами.
15 сен 17, 13:25    [20798682]     Ответить | Цитировать Сообщить модератору
 Re: Реляционка тут бессильна?  [new]
hVostt
Member

Откуда:
Сообщений: 11784
Кот Матроскин
Мои шикарные аргументы в защиту Вашего утверждения "все придется переделывать"? Хм.


Знатный вы фантазёр. Я не нашёл в своих утверждениях подобных слов.
15 сен 17, 13:27    [20798683]     Ответить | Цитировать Сообщить модератору
 Re: Реляционка тут бессильна?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 2857
Кот Матроскин
Ennor Tiegael
пропущено...
Этот там нужен - по нему фильтрация идет. Или у вас все юзеры видят все корзины? Вы, конечно, можете сказать "а до кастомеров можно через ордеры достучаться"

Разумеется можно - поэтому никакого "лишнего" места не тратится, одно поле заменяется другим.
В большинстве магазинов аноним может зайти и начать собирать корзину до авторизации. Будете в БД анонимный заказ сохранять? И отличаете их потом, наверное, как-то друг от друга?
15 сен 17, 13:27    [20798684]     Ответить | Цитировать Сообщить модератору
 Re: Реляционка тут бессильна?  [new]
hVostt
Member

Откуда:
Сообщений: 11784
Ennor Tiegael
В большинстве магазинов аноним может зайти и начать собирать корзину до авторизации. Будете в БД анонимный заказ сохранять? И отличаете их потом, наверное, как-то друг от друга?


Дык это.. у заказа будет статус «корзина» и «аноним»

Мда.
15 сен 17, 13:28    [20798687]     Ответить | Цитировать Сообщить модератору
 Re: Реляционка тут бессильна?  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 7686
Ennor Tiegael
Кот Матроскин
пропущено...

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

Я вообще-то привел другой кейс.
15 сен 17, 13:29    [20798691]     Ответить | Цитировать Сообщить модератору
 Re: Реляционка тут бессильна?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 2857
Кот Матроскин
Ennor Tiegael
пропущено...
Т.е. если у вас это есть, потому что вы решили не дробить заказы по адресам доставки, значит и у всех остальных так же должно быть? Понятненько.

Я вообще-то привел другой кейс.
Круто. А в моей аргументации это был один из ключевых аспектов, т.к. если бизнес решит, что ему никогда не понадобится мультишиппинг, то много какая ересь может оказаться вполне жизнеспособной.
15 сен 17, 13:35    [20798704]     Ответить | Цитировать Сообщить модератору
 Re: Реляционка тут бессильна?  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 7686
Ennor Tiegael
Кот Матроскин
пропущено...

Разумеется можно - поэтому никакого "лишнего" места не тратится, одно поле заменяется другим.
В большинстве магазинов аноним может зайти и начать собирать корзину до авторизации. Будете в БД анонимный заказ сохранять? И отличаете их потом, наверное, как-то друг от друга?

Конечно - анонимного пользователя с идентификацией по кукам и для него обычную корзину.
Я еще раз повторяю - точно так же Вам придется сохранить анонимного пользователя
для случая "корзина в отдельной таблице", вся разница - в том что у Вас будет CustomerID, а не OrderID.
15 сен 17, 13:36    [20798709]     Ответить | Цитировать Сообщить модератору
 Re: Реляционка тут бессильна?  [new]
hVostt
Member

Откуда:
Сообщений: 11784
Кот Матроскин
для случая "корзина в отдельной таблице", вся разница - в том что у Вас будет CustomerID, а не OrderID.


OrderID в корзине вообще не нужен. На одну корзину может быть создано несколько заказов, а CustomerId нужен всегда.
15 сен 17, 13:38    [20798717]     Ответить | Цитировать Сообщить модератору
 Re: Реляционка тут бессильна?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 2857
tip78
Ennor Tiegael
Ну и я до сих пор не увидел рациональной аргументации, зачем пользователю иметь OrderId на стадии наполнения корзины. Вы же понимаете, что столбцы на страницах занимают место, и каждое обращение к корзине будет этот столбец с диска поднимать, даже если он не включен в селект. Ну и размер таблицы в этом случае будет совсем не копеечный.

чтобы товар попадал в его корзину, а не в чужую
а ещё когда UID нет (авторизации не было), тоже надо как-то товар ловить...
В большинстве магазинов аноним может зайти и начать собирать корзину до авторизации. Будете в БД анонимный заказ сохранять? И отличаете их потом, наверное, как-то друг от друга?
15 сен 17, 13:40    [20798724]     Ответить | Цитировать Сообщить модератору
 Re: Реляционка тут бессильна?  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 7686
Ennor Tiegael
Кот Матроскин
пропущено...

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


Я сказал что нет проблем сделать мультишиппинг в концепции "одна таблица", наоборот, будет выигрыш за счет того что не придется второй раз реализовывать фичу. Вы ответили "А мне и так не придется - у меня первой фичи нет!". Ну и кто тут должен говорить "Раз у Вас нет - то и у других не должно быть?"
15 сен 17, 13:40    [20798726]     Ответить | Цитировать Сообщить модератору
 Re: Реляционка тут бессильна?  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 7686
hVostt
Кот Матроскин
для случая "корзина в отдельной таблице", вся разница - в том что у Вас будет CustomerID, а не OrderID.


OrderID в корзине вообще не нужен. На одну корзину может быть создано несколько заказов, а CustomerId нужен всегда.

Нет, в случае наличия OrderID customerID в корзине не нужен. Тут даже на 2 шага вперед думать необязательно - это прямо на нулевом шаге видно :)
15 сен 17, 13:42    [20798737]     Ответить | Цитировать Сообщить модератору
 Re: Реляционка тут бессильна?  [new]
tip78
Member

Откуда: Москва
Сообщений: 473
hVostt
tip78
hVostt
пропущено...


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

какие?


Что какие? Заказ сам себя сформирует, проведёт и проверит оплату, укомплектуется, и сам себя передаст в службу доставки? Где сам себя доставит и проконтролирует?

это процессы не с корзиной, а с заказом (у меня это одна сущность, у вас - 2). Я спрашивал - какие "совершенно другие процессы" вы делаете с корзиной, что её непременно надо отделять от заказа? Если хотите хранить все клиентские "добавить/удалить" (кому они нужны?), то сделайте таблицу истории.

hVostt
tip78
для этого статусы есть, как тут 20796966
и вообще "история заказа" это другая сущность (если она вам действительно нужна подробная), а не корзина + заказ


Корзина не является заказом. Это не статус заказа. Не согласны?

вы всё пытаетесь привязать к корзине какие-то события, которые непременно надо обрабатывать отдельно от заказа,
но их НЕТ. И это ключевой момент.
всё что юзер собрал в заказ просто едет дальше, а история наполнения/редактирования - ну ведите, если надо, в отдельной таблице, только это просто статусы, они не разбивают заказ на ДО = корзина и ПОСЛЕ = заказ.
15 сен 17, 13:51    [20798783]     Ответить | Цитировать Сообщить модератору
 Re: Реляционка тут бессильна?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 2857
Кот Матроскин
Ennor Tiegael
пропущено...
В большинстве магазинов аноним может зайти и начать собирать корзину до авторизации. Будете в БД анонимный заказ сохранять? И отличаете их потом, наверное, как-то друг от друга?

Конечно - анонимного пользователя с идентификацией по кукам и для него обычную корзину.
Я еще раз повторяю - точно так же Вам придется сохранить анонимного пользователя
для случая "корзина в отдельной таблице", вся разница - в том что у Вас будет CustomerID, а не OrderID.
Анонимный пользователь будет хранить свою корзину в локальной куке и нигде более. Полагаю, что спецслужбы знают способ, как сопоставить 2 анонимные сессии с разных айпишников, но мне он неизвестен.

Ключевое же отличие в том, что клиент, действительно, есть всегда, а вот заказ появляется только после того, как пользователь:
  • Авторизовался;
  • Нажал submit.

    А там, где нет заказа, нет и OrderId. Чел может днями играться со своей корзиной, а потом все нафиг стереть и ничего не взять - понятно, что для какого-нибудь поведенческого дата майнинга вся эта история действий может быть полезной, не это все-таки совсем притягивание за уши.
  • 15 сен 17, 13:53    [20798793]     Ответить | Цитировать Сообщить модератору
     Re: Реляционка тут бессильна?  [new]
    hVostt
    Member

    Откуда:
    Сообщений: 11784
    Кот Матроскин
    Нет, в случае наличия OrderID customerID в корзине не нужен. Тут даже на 2 шага вперед думать необязательно - это прямо на нулевом шаге видно :)


    Т.е. не получится сделать 2 разных заказа на 1 корзину? Ясненько.
    15 сен 17, 13:55    [20798802]     Ответить | Цитировать Сообщить модератору
     Re: Реляционка тут бессильна?  [new]
    hVostt
    Member

    Откуда:
    Сообщений: 11784
    tip78
    это процессы не с корзиной, а с заказом (у меня это одна сущность, у вас - 2). Я спрашивал - какие "совершенно другие процессы" вы делаете с корзиной, что её непременно надо отделять от заказа? Если хотите хранить все клиентские "добавить/удалить" (кому они нужны?), то сделайте таблицу истории.


    Историчность -- отдельная песня. Зачем я буду логику класть на историчность?


    tip78
    вы всё пытаетесь привязать к корзине какие-то события, которые непременно надо обрабатывать отдельно от заказа,
    но их НЕТ. И это ключевой момент.


    Как это нет? А уведомление: вы положили в корзину товары, но не оформили заказ? А уведомление, товар, который вы добавили в корзину появился в наличии? Вы в каком мире живёте, в вымышленном, если у вас таких событий нет?


    tip78
    всё что юзер собрал в заказ просто едет дальше, а история наполнения/редактирования - ну ведите, если надо, в отдельной таблице, только это просто статусы, они не разбивают заказ на ДО = корзина и ПОСЛЕ = заказ.


    Дальше едет заказ. Вы в жизни посмотрите как это делается. Придите в магазин. Что видите? Корзину. Или вы сразу сразу оформляете чек?
    15 сен 17, 13:58    [20798814]     Ответить | Цитировать Сообщить модератору
     Re: Реляционка тут бессильна?  [new]
    Кот Матроскин
    Member

    Откуда: Москва
    Сообщений: 7686
    Ennor Tiegael
    Кот Матроскин
    пропущено...

    Конечно - анонимного пользователя с идентификацией по кукам и для него обычную корзину.
    Я еще раз повторяю - точно так же Вам придется сохранить анонимного пользователя
    для случая "корзина в отдельной таблице", вся разница - в том что у Вас будет CustomerID, а не OrderID.
    Анонимный пользователь будет хранить свою корзину в локальной куке и нигде более.

    "Если у Вас так, то и у других должно быть так? Понятненько" (с)
    У меня хранятся в базе корзины анонимных пользователей. И да, статистические отчеты по этим корзинам для отдела продаж есть.
    15 сен 17, 13:59    [20798822]     Ответить | Цитировать Сообщить модератору
     Re: Реляционка тут бессильна?  [new]
    tip78
    Member

    Откуда: Москва
    Сообщений: 473
    Ennor Tiegael
    tip78
    пропущено...

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

    не "буду", а сохраняю )
    во1, это статистика, её можно поанализировать
    во2, опять же всё в одном месте (где ещё их хранить и зачем?)
    в3, клиенту напоминалка придёт про его незаконченную корзину
    в4, через какое-то время незаконченные удаляются
    15 сен 17, 14:02    [20798838]     Ответить | Цитировать Сообщить модератору
     Re: Реляционка тут бессильна?  [new]
    Кот Матроскин
    Member

    Откуда: Москва
    Сообщений: 7686
    hVostt
    Кот Матроскин
    Нет, в случае наличия OrderID customerID в корзине не нужен. Тут даже на 2 шага вперед думать необязательно - это прямо на нулевом шаге видно :)


    Т.е. не получится сделать 2 разных заказа на 1 корзину? Ясненько.

    Глупости :)
    Вам надо как-то переформатировать свои сообщения - писать "Дяденька, а как сделать 2 разных заказа на одну корзину в случае хранения в одной таблице? Я не умею :(" - не исключено что так Вы скорее научитесь :)
    15 сен 17, 14:02    [20798840]     Ответить | Цитировать Сообщить модератору
     Re: Реляционка тут бессильна?  [new]
    tip78
    Member

    Откуда: Москва
    Сообщений: 473
    тьфу, напоминалка не в этом случае ))
    15 сен 17, 14:03    [20798846]     Ответить | Цитировать Сообщить модератору
     Re: Реляционка тут бессильна?  [new]
    Ennor Tiegael
    Member

    Откуда:
    Сообщений: 2857
    tip78
    вы всё пытаетесь привязать к корзине какие-то события, которые непременно надо обрабатывать отдельно от заказа,
    но их НЕТ. И это ключевой момент.
    Наоборот - это у заказа есть действия, которые отсутствуют у корзины. Я писал, что атрибуты тоже отличаются - для корзины будет достаточно (CustomerId, ItemId, Count); для детали заказа, очевидно, нет. Или это только мне очевидно, и надо реально объяснять?

    Что вы действительно упускаете, так это лес за деревьями. Данные в корзине по природе своей временные. Лично мне в базе они вообще не нужны - строго говоря, для них даже РСУБД не нужна, достаточно простейшего blob list. Поэтому я выношу таблицу корзины в отдельную БД, ставлю ей simple recovery и экономлю на бэкапах лога (в оракле, вроде бы, можно на уровне таблиц логирование отключать). Если что-то гавкнется, то потери будут минимальны и не критичны.
    15 сен 17, 14:16    [20798896]     Ответить | Цитировать Сообщить модератору
     Re: Реляционка тут бессильна?  [new]
    Ennor Tiegael
    Member

    Откуда:
    Сообщений: 2857
    hVostt
    А уведомление: вы положили в корзину товары, но не оформили заказ? А уведомление, товар, который вы добавили в корзину появился в наличии?
    Кстати, да, совершенно забыл. Окей, согласен, корзину надо хранить в БД - но никто не требует, что это должна быть та же БД.
    15 сен 17, 14:25    [20798927]     Ответить | Цитировать Сообщить модератору
     Re: Реляционка тут бессильна?  [new]
    Кот Матроскин
    Member

    Откуда: Москва
    Сообщений: 7686
    Ennor Tiegael
    Наоборот - это у заказа есть действия, которые отсутствуют у корзины.

    У заказа в комплектации есть действия, которые отсутствуют у отправленного заказа, у отправленного - те которые отсутствуют у выполненного, etc. Тоже будем бить их на разные классы/таблицы? :)
    15 сен 17, 14:31    [20798942]     Ответить | Цитировать Сообщить модератору
     Re: Реляционка тут бессильна?  [new]
    Ennor Tiegael
    Member

    Откуда:
    Сообщений: 2857
    tip78
    в3, клиенту напоминалка придёт про его незаконченную корзину
    Ммм? Анониму?
    tip78
    в4, через какое-то время незаконченные удаляются
    Если каждый заказ - это событие, то возможно. Когда их сотни тысяч в день, удаление из такой таблицы будет вести к фрагментации, а ребилдить индексы в 24*7 системе обычно непросто. Мне здравый смысл подсказывает, что можно сэкономить на дефрагментации, не записывая туда данные, которые могут быть впоследствии удалены.
    15 сен 17, 14:37    [20798962]     Ответить | Цитировать Сообщить модератору
     Re: Реляционка тут бессильна?  [new]
    Ennor Tiegael
    Member

    Откуда:
    Сообщений: 2857
    Кот Матроскин
    Ennor Tiegael
    Наоборот - это у заказа есть действия, которые отсутствуют у корзины.

    У заказа в комплектации есть действия, которые отсутствуют у отправленного заказа, у отправленного - те которые отсутствуют у выполненного, etc. Тоже будем бить их на разные классы/таблицы? :)
    Где вас учили так перегибать палку с использованием reductio ad absurdum? Толсто же.

    Кстати говоря - да, их действительно имеет смысл разносить по разным таблицам. Точнее, на разных этапах воркфлоу заказ обрастает дополнительными данными, которые отсутствовали на предыдущих стадиях. Разбивка по складам, в общем случае, может быть неизвестна в самом начале, и заполняться позже. Трекинг(и) доставки появляются только после отправки. Оплата - я говорю о цивилизованных странах, где cash on delivery большая редкость - вообще целая отдельная вселенная. Я надеюсь, вы понимаете, что все это, и многое другое, хранится в своих собственных таблицах, а не в позициях заказа.

    С моей т.з. главное тут, что оформленные заказы во всех последующих стадиях одинаково персистентны. Корзина же временная по своей природе, и схема данных у нее совсем другая.
    15 сен 17, 14:52    [20799033]     Ответить | Цитировать Сообщить модератору
     Re: Реляционка тут бессильна?  [new]
    MasterZiv
    Member

    Откуда: Питер
    Сообщений: 33575
    registerers
    Суть проблемы можно пояснить на примере того же банального интернет-магазина. Есть множество таблиц разных товаров, потому что набор свойств (атрибутов) у них разный. Например, булка хлеба и како-нибудь девайс. Вопрос - как положить в корзину и то, и другое, и пятое-десятое?


    Ответ на твой "супер-сложный" вопрос так же суперпрост:
    надо использовать наследование, оно же отношение подкатегории (между сущностями).
    Вжух -- и нет проблем!
    15 сен 17, 16:30    [20799445]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6 7   вперед  Ctrl      все
    Все форумы / Проектирование БД Ответить