powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Реляционка тут бессильна?
25 сообщений из 169, страница 2 из 7
Реляционка тут бессильна?
    #39520528
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerersКот Матроскинвключаете поле Type в ключ, накладываете на него соответствующие ограничения в каждой из subtype-таблиц
Интересно, как вы себе представляете эти "соответствующие ограничения"?))

Крайне просто - ограничение значения константой.

registerersВот, например, физическая модель, из которой видно, что любая из subtype-таблиц может ссылаться на одну и ту же запись в supertype-таблице:


Тут есть Type в составе ключа Product?
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39520536
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин,

Cart и Order лучше бы отсадить, так как корзина это то, с чем работает пользователь, а заказ это то, с чем работает отдел продаж и доставки. Заказ может впоследствии отличаться от корзины.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39520538
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ennor TiegaelВообще ничего общего.

Делается одна таблица, условно говоря Products, которая выступает корнем вашей товарной иерархии. Туда можно поместить атрибуты, общие для всех (или почти всех) видов товаров: название, внутренний код, вес, Д*Ш*В, (возможно) цена и т.д.

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

Ennor TiegaelНа эту же таблицу будет ссылаться корзина. Только вот, зачем у вас корзина ссылается на заказы? Во всех магазинах, какие я видел, если товар лежит в корзине, значит заказ на него еще не существует, ммм? Корзину лучше сделать М:М связкой между Products и Customers, как у всех.
Связь между заказами и товарами в корзине должна же быть в любом случае. Также должна быть связь между заказами и покупателями. В таком случае возникает избыточность и цикличность связей: товары в корзине связаны с покупателями непосредственно и через заказ.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39520552
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttКот Матроскин,

Cart и Order лучше бы отсадить, так как корзина это то, с чем работает пользователь, а заказ это то, с чем работает отдел продаж и доставки. Заказ может впоследствии отличаться от корзины.
схема не моя, а моего оппонента :) но я, кстати, не разделяю идею "Cart и Order лучше бы отсадить".
Работают разные категории пользователей - ну и что? С таблицей контрагентов может работать десяток разных категорий - ее тоже надо бить на 10 разных таблиц? :)
Заказ может впоследствии отличаться от корзины - опять же, заказ может изменяться (и, следовательно, отличаться от предыдущего состояния) на разных этапах своего существования, и что?
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39520649
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинhVosttКот Матроскин,

Cart и Order лучше бы отсадить, так как корзина это то, с чем работает пользователь, а заказ это то, с чем работает отдел продаж и доставки. Заказ может впоследствии отличаться от корзины.
схема не моя, а моего оппонента :) но я, кстати, не разделяю идею "Cart и Order лучше бы отсадить".
Работают разные категории пользователей - ну и что? С таблицей контрагентов может работать десяток разных категорий - ее тоже надо бить на 10 разных таблиц? :)
Заказ может впоследствии отличаться от корзины - опять же, заказ может изменяться (и, следовательно, отличаться от предыдущего состояния) на разных этапах своего существования, и что?

согласен, проще флаг сменить: 1 = корзина; 2 = заказ
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39520681
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот МатроскинТут есть Type в составе ключа Product?
Вы имели в виду что-то вроде этого?


Но тогда возникает вопрос - как обеспечить константность значений полей SubA.Type, SubB.Type, и как быть с суб-таблицами при удалении соответствующих типов?
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39520707
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerersНо тогда возникает вопрос - как обеспечить константность значений полей SubA.Type, SubB.Type,

Ограничениями (check), я же сказал. У разных СУБД механизм отличается, но не сильно.
registerersи как быть с суб-таблицами при удалении соответствующих типов?
Не понял. Вы хотите убить тип "ProductB", но при этом сохранить таблицу ProductB? А какой в этом физический смысл?
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39520719
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот МатроскинНе понял. Вы хотите убить тип "ProductB", но при этом сохранить таблицу ProductB? А какой в этом физический смысл?
Наоборот, я не хочу сохранять эту таблицу))) В том то и дело, что не существует механизма удалить таблицу автоматически и это нужно делать только в приложении
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39520740
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerersКот МатроскинНе понял. Вы хотите убить тип "ProductB", но при этом сохранить таблицу ProductB? А какой в этом физический смысл?
Наоборот, я не хочу сохранять эту таблицу))) В том то и дело, что не существует механизма удалить таблицу автоматически и это нужно делать только в приложении
Не вижу проблем в пустой таблице (очиститься-то она у Вас очистится при ON DELETE CASCADE).
Да, в реляционной модели при очистке родительской таблицы подчиненные таблицы автоматом не дропаются - при удалении всех заказов таблица элементов заказов тоже не дропается, если такое поведение требуется - надо прописывать руками. Если Вы это считаете серьезным недостатком - ну да, РСУБД Вам подходят не очень.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39520773
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот Матроскинregisterersпропущено...

Наоборот, я не хочу сохранять эту таблицу))) В том то и дело, что не существует механизма удалить таблицу автоматически и это нужно делать только в приложении
Не вижу проблем в пустой таблице (очиститься-то она у Вас очистится при ON DELETE CASCADE).
Да, в реляционной модели при очистке родительской таблицы подчиненные таблицы автоматом не дропаются - при удалении всех заказов таблица элементов заказов тоже не дропается, если такое поведение требуется - надо прописывать руками. Если Вы это считаете серьезным недостатком - ну да, РСУБД Вам подходят не очень.
Вот! Что, собственно, и требовалось доказать. Всем спасибо за ответы!
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39520805
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerersКот Матроскинпропущено...

Не вижу проблем в пустой таблице (очиститься-то она у Вас очистится при ON DELETE CASCADE).
Да, в реляционной модели при очистке родительской таблицы подчиненные таблицы автоматом не дропаются - при удалении всех заказов таблица элементов заказов тоже не дропается, если такое поведение требуется - надо прописывать руками. Если Вы это считаете серьезным недостатком - ну да, РСУБД Вам подходят не очень.
Вот! Что, собственно, и требовалось доказать. Всем спасибо за ответы!
не это, а то что ваша архитектура БД - дичь
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39520834
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerers,

Вы хоть что-нибудь по теории РСУБД читали? Жесть какая-то, просто.

Еще раз: заказ не существует, пока пользователь не сказал оформить его. Зачем ссылаться на несуществующую сущность, а главное, что вам дает эта связь?

Ну и наконец, если пользователь захочет отправить содержимое корзины по нескольким адресам - как у Амазона, "Deliver to multiple addresses" - придется проделывать кучу дополнительных телодвижений.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39520857
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскинсхема не моя, а моего оппонента :) но я, кстати, не разделяю идею "Cart и Order лучше бы отсадить".
Работают разные категории пользователей - ну и что? С таблицей контрагентов может работать десяток разных категорий - ее тоже надо бить на 10 разных таблиц? :)
Заказ может впоследствии отличаться от корзины - опять же, заказ может изменяться (и, следовательно, отличаться от предыдущего состояния) на разных этапах своего существования, и что?

Вот именно, что может изменяться. Поэтому надо разделять. Пользователь редактирует корзину, заказ редактировать не может. Да и циклы разные.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39520859
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor TiegaelНу и наконец, если пользователь захочет отправить содержимое корзины по нескольким адресам - как у Амазона, "Deliver to multiple addresses" - придется проделывать кучу дополнительных телодвижений.

Если корзина и заказ — разные таблицы и сущности, то сделать подобное не проблема
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39520966
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttКот Матроскинсхема не моя, а моего оппонента :) но я, кстати, не разделяю идею "Cart и Order лучше бы отсадить".
Работают разные категории пользователей - ну и что? С таблицей контрагентов может работать десяток разных категорий - ее тоже надо бить на 10 разных таблиц? :)
Заказ может впоследствии отличаться от корзины - опять же, заказ может изменяться (и, следовательно, отличаться от предыдущего состояния) на разных этапах своего существования, и что?

Вот именно, что может изменяться. Поэтому надо разделять. Пользователь редактирует корзину, заказ редактировать не может. Да и циклы разные.
Заказ тоже может изменяться и отличаться от самого себя на вчера - что и с чем Вы будете разделять в этом случае?

hVosttЕсли корзина и заказ — разные таблицы и сущности, то сделать подобное не проблема
Если корзина и элементы заказа это одна таблица - то внезапно тоже (хотя я знаю мало интернет-магазинов, которые вместо того чтобы предложить в этом случае пользователю оформить несколько заказов, делают такую штуку).
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39520983
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинЗаказ тоже может изменяться и отличаться от самого себя на вчера - что и с чем Вы будете разделять в этом случае?

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


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

Глупо спорить с тем, что гвоздь можно забить микроскопом. Можно вообще всё на одной таблице сделать. А можно и на счётах всё посчитать.

Но поддерживать это будет трудоёмко и, соответственно, дорого.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39520994
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt Про отличаться от самого себя, это про историю, решается тоже по-разному.

Зачем тогда это приводить как аргумент за "надо разделять", если никакой причинно-следственной связи "может отличаться"->"надо разделять" нет?
hVosttНо поддерживать это будет трудоёмко и, соответственно, дорого.
С чего бы? :)
Наоборот - не надо будет дублировать методы "добавить элемент в заказ", "добавить элемент в корзину", "удалить элемент из заказа", "удалить элемент из корзины", "рассчитать общую стоимость заказа", "рассчитать общую стоимость корзины", ....
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39520995
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
любители хранить корзины отдельно, какую ценность для вас несёт первозданная корзина ДО кнопки "оформить заказ" ?
после звонка менеджера выяснится, что чего-то нет, что-то забыли доложить, что-то надо заменить
важны не эти изменения, а только ОПЛАЧЕННЫЙ ЗАКАЗ = транзакция: -товар +деньги
а зачем плодить "черновики"?
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521004
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78а зачем плодить "черновики"?

Затем, что у пользователя может внезапно упасть интернет, а когда он вернётся на следующий
день, ему будет приятно видеть, что его корзина сохранилась и ему не надо её заново набивать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521012
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tip78registerersпропущено...

Вот! Что, собственно, и требовалось доказать. Всем спасибо за ответы!
не это, а то что ваша архитектура БД - дичь
Это не "моя ахритектура", а доказательство того, что Flat table - это антипаттерн))
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521019
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее моветон.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521026
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ennor Tiegaelregisterers,

Вы хоть что-нибудь по теории РСУБД читали? Жесть какая-то, просто.

Еще раз: заказ не существует, пока пользователь не сказал оформить его. Зачем ссылаться на несуществующую сущность, а главное, что вам дает эта связь?

Ну и наконец, если пользователь захочет отправить содержимое корзины по нескольким адресам - как у Амазона, "Deliver to multiple addresses" - придется проделывать кучу дополнительных телодвижений.
Где вы увидели "жесть"? Связь в корзине между продуктом и заказом появляется после его оформления. То есть поле Cart.OrderId может быть nullable, что является признаком того, что товар добавлен в корзину, но ещё не оформлен
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521043
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tip78любители хранить корзины отдельно, какую ценность для вас несёт первозданная корзина ДО кнопки "оформить заказ" ?
после звонка менеджера выяснится, что чего-то нет, что-то забыли доложить, что-то надо заменить
важны не эти изменения, а только ОПЛАЧЕННЫЙ ЗАКАЗ = транзакция: -товар +деньги
а зачем плодить "черновики"?
Бугога)) А по какому признаку вы собираетесь агрегировать товары в таблице? По времени добавления в корзину?)))
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521054
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183Скорее моветон.
Так а можете предложить что-то лучше?)
Например, как писалось выше, EAV не совсем уместен, когда видов товара, скажем 2-3, но много записей самих товаров. Поэтому Flat table здесь как бы больше подходит, но обладает своими недостатками, о которых я писал.
Ну, как более универсальный вариант - это хранение атрибутов товаров в новомодных хипстерских штучках вроде NoSQL
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521055
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это философия.
Есть варианты, конкретный выбор зависит от ситуации.
...
Рейтинг: 0 / 0
25 сообщений из 169, страница 2 из 7
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Реляционка тут бессильна?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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