|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
registerersКот Матроскинвключаете поле Type в ключ, накладываете на него соответствующие ограничения в каждой из subtype-таблиц Интересно, как вы себе представляете эти "соответствующие ограничения"?)) Крайне просто - ограничение значения константой. registerersВот, например, физическая модель, из которой видно, что любая из subtype-таблиц может ссылаться на одну и ту же запись в supertype-таблице: Тут есть Type в составе ключа Product? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2017, 15:40 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Кот Матроскин, Cart и Order лучше бы отсадить, так как корзина это то, с чем работает пользователь, а заказ это то, с чем работает отдел продаж и доставки. Заказ может впоследствии отличаться от корзины. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2017, 15:56 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Ennor TiegaelВообще ничего общего. Делается одна таблица, условно говоря Products, которая выступает корнем вашей товарной иерархии. Туда можно поместить атрибуты, общие для всех (или почти всех) видов товаров: название, внутренний код, вес, Д*Ш*В, (возможно) цена и т.д. На эту таблицу ссылаются все остальные товарные категории, причем первичный ключ из нее можно наследовать и использовать в качестве ключа в самих дочках. Разве в моём примере не так?))) Ennor TiegaelНа эту же таблицу будет ссылаться корзина. Только вот, зачем у вас корзина ссылается на заказы? Во всех магазинах, какие я видел, если товар лежит в корзине, значит заказ на него еще не существует, ммм? Корзину лучше сделать М:М связкой между Products и Customers, как у всех. Связь между заказами и товарами в корзине должна же быть в любом случае. Также должна быть связь между заказами и покупателями. В таком случае возникает избыточность и цикличность связей: товары в корзине связаны с покупателями непосредственно и через заказ. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2017, 15:59 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
hVosttКот Матроскин, Cart и Order лучше бы отсадить, так как корзина это то, с чем работает пользователь, а заказ это то, с чем работает отдел продаж и доставки. Заказ может впоследствии отличаться от корзины. схема не моя, а моего оппонента :) но я, кстати, не разделяю идею "Cart и Order лучше бы отсадить". Работают разные категории пользователей - ну и что? С таблицей контрагентов может работать десяток разных категорий - ее тоже надо бить на 10 разных таблиц? :) Заказ может впоследствии отличаться от корзины - опять же, заказ может изменяться (и, следовательно, отличаться от предыдущего состояния) на разных этапах своего существования, и что? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2017, 16:14 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Кот МатроскинhVosttКот Матроскин, Cart и Order лучше бы отсадить, так как корзина это то, с чем работает пользователь, а заказ это то, с чем работает отдел продаж и доставки. Заказ может впоследствии отличаться от корзины. схема не моя, а моего оппонента :) но я, кстати, не разделяю идею "Cart и Order лучше бы отсадить". Работают разные категории пользователей - ну и что? С таблицей контрагентов может работать десяток разных категорий - ее тоже надо бить на 10 разных таблиц? :) Заказ может впоследствии отличаться от корзины - опять же, заказ может изменяться (и, следовательно, отличаться от предыдущего состояния) на разных этапах своего существования, и что? согласен, проще флаг сменить: 1 = корзина; 2 = заказ ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2017, 17:57 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Кот МатроскинТут есть Type в составе ключа Product? Вы имели в виду что-то вроде этого? Но тогда возникает вопрос - как обеспечить константность значений полей SubA.Type, SubB.Type, и как быть с суб-таблицами при удалении соответствующих типов? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2017, 18:54 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
registerersНо тогда возникает вопрос - как обеспечить константность значений полей SubA.Type, SubB.Type, Ограничениями (check), я же сказал. У разных СУБД механизм отличается, но не сильно. registerersи как быть с суб-таблицами при удалении соответствующих типов? Не понял. Вы хотите убить тип "ProductB", но при этом сохранить таблицу ProductB? А какой в этом физический смысл? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2017, 19:41 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Кот МатроскинНе понял. Вы хотите убить тип "ProductB", но при этом сохранить таблицу ProductB? А какой в этом физический смысл? Наоборот, я не хочу сохранять эту таблицу))) В том то и дело, что не существует механизма удалить таблицу автоматически и это нужно делать только в приложении ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2017, 20:19 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
registerersКот МатроскинНе понял. Вы хотите убить тип "ProductB", но при этом сохранить таблицу ProductB? А какой в этом физический смысл? Наоборот, я не хочу сохранять эту таблицу))) В том то и дело, что не существует механизма удалить таблицу автоматически и это нужно делать только в приложении Не вижу проблем в пустой таблице (очиститься-то она у Вас очистится при ON DELETE CASCADE). Да, в реляционной модели при очистке родительской таблицы подчиненные таблицы автоматом не дропаются - при удалении всех заказов таблица элементов заказов тоже не дропается, если такое поведение требуется - надо прописывать руками. Если Вы это считаете серьезным недостатком - ну да, РСУБД Вам подходят не очень. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2017, 20:55 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Кот Матроскинregisterersпропущено... Наоборот, я не хочу сохранять эту таблицу))) В том то и дело, что не существует механизма удалить таблицу автоматически и это нужно делать только в приложении Не вижу проблем в пустой таблице (очиститься-то она у Вас очистится при ON DELETE CASCADE). Да, в реляционной модели при очистке родительской таблицы подчиненные таблицы автоматом не дропаются - при удалении всех заказов таблица элементов заказов тоже не дропается, если такое поведение требуется - надо прописывать руками. Если Вы это считаете серьезным недостатком - ну да, РСУБД Вам подходят не очень. Вот! Что, собственно, и требовалось доказать. Всем спасибо за ответы! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2017, 22:31 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
registerersКот Матроскинпропущено... Не вижу проблем в пустой таблице (очиститься-то она у Вас очистится при ON DELETE CASCADE). Да, в реляционной модели при очистке родительской таблицы подчиненные таблицы автоматом не дропаются - при удалении всех заказов таблица элементов заказов тоже не дропается, если такое поведение требуется - надо прописывать руками. Если Вы это считаете серьезным недостатком - ну да, РСУБД Вам подходят не очень. Вот! Что, собственно, и требовалось доказать. Всем спасибо за ответы! не это, а то что ваша архитектура БД - дичь ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2017, 00:35 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
registerers, Вы хоть что-нибудь по теории РСУБД читали? Жесть какая-то, просто. Еще раз: заказ не существует, пока пользователь не сказал оформить его. Зачем ссылаться на несуществующую сущность, а главное, что вам дает эта связь? Ну и наконец, если пользователь захочет отправить содержимое корзины по нескольким адресам - как у Амазона, "Deliver to multiple addresses" - придется проделывать кучу дополнительных телодвижений. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2017, 06:48 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Кот Матроскинсхема не моя, а моего оппонента :) но я, кстати, не разделяю идею "Cart и Order лучше бы отсадить". Работают разные категории пользователей - ну и что? С таблицей контрагентов может работать десяток разных категорий - ее тоже надо бить на 10 разных таблиц? :) Заказ может впоследствии отличаться от корзины - опять же, заказ может изменяться (и, следовательно, отличаться от предыдущего состояния) на разных этапах своего существования, и что? Вот именно, что может изменяться. Поэтому надо разделять. Пользователь редактирует корзину, заказ редактировать не может. Да и циклы разные. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2017, 08:07 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Ennor TiegaelНу и наконец, если пользователь захочет отправить содержимое корзины по нескольким адресам - как у Амазона, "Deliver to multiple addresses" - придется проделывать кучу дополнительных телодвижений. Если корзина и заказ — разные таблицы и сущности, то сделать подобное не проблема ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2017, 08:07 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
hVosttКот Матроскинсхема не моя, а моего оппонента :) но я, кстати, не разделяю идею "Cart и Order лучше бы отсадить". Работают разные категории пользователей - ну и что? С таблицей контрагентов может работать десяток разных категорий - ее тоже надо бить на 10 разных таблиц? :) Заказ может впоследствии отличаться от корзины - опять же, заказ может изменяться (и, следовательно, отличаться от предыдущего состояния) на разных этапах своего существования, и что? Вот именно, что может изменяться. Поэтому надо разделять. Пользователь редактирует корзину, заказ редактировать не может. Да и циклы разные. Заказ тоже может изменяться и отличаться от самого себя на вчера - что и с чем Вы будете разделять в этом случае? hVosttЕсли корзина и заказ — разные таблицы и сущности, то сделать подобное не проблема Если корзина и элементы заказа это одна таблица - то внезапно тоже (хотя я знаю мало интернет-магазинов, которые вместо того чтобы предложить в этом случае пользователю оформить несколько заказов, делают такую штуку). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2017, 11:04 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Кот МатроскинЗаказ тоже может изменяться и отличаться от самого себя на вчера - что и с чем Вы будете разделять в этом случае? Вопрос в том, кто его может изменить и область его ответственности. Про отличаться от самого себя, это про историю, решается тоже по-разному. Кот МатроскинЕсли корзина и элементы заказа это одна таблица - то внезапно тоже (хотя я знаю мало интернет-магазинов, которые вместо того чтобы предложить в этом случае пользователю оформить несколько заказов, делают такую штуку). Глупо спорить с тем, что гвоздь можно забить микроскопом. Можно вообще всё на одной таблице сделать. А можно и на счётах всё посчитать. Но поддерживать это будет трудоёмко и, соответственно, дорого. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2017, 11:29 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
hVostt Про отличаться от самого себя, это про историю, решается тоже по-разному. Зачем тогда это приводить как аргумент за "надо разделять", если никакой причинно-следственной связи "может отличаться"->"надо разделять" нет? hVosttНо поддерживать это будет трудоёмко и, соответственно, дорого. С чего бы? :) Наоборот - не надо будет дублировать методы "добавить элемент в заказ", "добавить элемент в корзину", "удалить элемент из заказа", "удалить элемент из корзины", "рассчитать общую стоимость заказа", "рассчитать общую стоимость корзины", .... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2017, 11:37 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
любители хранить корзины отдельно, какую ценность для вас несёт первозданная корзина ДО кнопки "оформить заказ" ? после звонка менеджера выяснится, что чего-то нет, что-то забыли доложить, что-то надо заменить важны не эти изменения, а только ОПЛАЧЕННЫЙ ЗАКАЗ = транзакция: -товар +деньги а зачем плодить "черновики"? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2017, 11:38 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
tip78а зачем плодить "черновики"? Затем, что у пользователя может внезапно упасть интернет, а когда он вернётся на следующий день, ему будет приятно видеть, что его корзина сохранилась и ему не надо её заново набивать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2017, 11:52 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
tip78registerersпропущено... Вот! Что, собственно, и требовалось доказать. Всем спасибо за ответы! не это, а то что ваша архитектура БД - дичь Это не "моя ахритектура", а доказательство того, что Flat table - это антипаттерн)) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2017, 12:06 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Скорее моветон. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2017, 12:13 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Ennor Tiegaelregisterers, Вы хоть что-нибудь по теории РСУБД читали? Жесть какая-то, просто. Еще раз: заказ не существует, пока пользователь не сказал оформить его. Зачем ссылаться на несуществующую сущность, а главное, что вам дает эта связь? Ну и наконец, если пользователь захочет отправить содержимое корзины по нескольким адресам - как у Амазона, "Deliver to multiple addresses" - придется проделывать кучу дополнительных телодвижений. Где вы увидели "жесть"? Связь в корзине между продуктом и заказом появляется после его оформления. То есть поле Cart.OrderId может быть nullable, что является признаком того, что товар добавлен в корзину, но ещё не оформлен ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2017, 12:20 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
tip78любители хранить корзины отдельно, какую ценность для вас несёт первозданная корзина ДО кнопки "оформить заказ" ? после звонка менеджера выяснится, что чего-то нет, что-то забыли доложить, что-то надо заменить важны не эти изменения, а только ОПЛАЧЕННЫЙ ЗАКАЗ = транзакция: -товар +деньги а зачем плодить "черновики"? Бугога)) А по какому признаку вы собираетесь агрегировать товары в таблице? По времени добавления в корзину?))) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2017, 12:40 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
982183Скорее моветон. Так а можете предложить что-то лучше?) Например, как писалось выше, EAV не совсем уместен, когда видов товара, скажем 2-3, но много записей самих товаров. Поэтому Flat table здесь как бы больше подходит, но обладает своими недостатками, о которых я писал. Ну, как более универсальный вариант - это хранение атрибутов товаров в новомодных хипстерских штучках вроде NoSQL ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2017, 12:50 |
|
|
start [/forum/topic.php?fid=32&msg=39520995&tid=1540132]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
192ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 235ms |
total: | 535ms |
0 / 0 |