|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
MasterZivОтвет на твой "супер-сложный" вопрос так же суперпрост: надо использовать наследование, оно же отношение подкатегории (между сущностями). Вжух -- и нет проблем! Тут тема не про объектно-ориентированные, а про реляционные БД. Какое наследование? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 17:27 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
registerersMasterZivОтвет на твой "супер-сложный" вопрос так же суперпрост: надо использовать наследование, оно же отношение подкатегории (между сущностями). Вжух -- и нет проблем! Тут тема не про объектно-ориентированные, а про реляционные БД. Какое наследование? Вы разве не знаете, что наследование реализуется в виде связи 1-к-1 между 2-мя таблицами? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 17:28 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
На примере MS SQL. Код: sql 1. 2. 3. 4. 5.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 17:39 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
skyANAregisterersпропущено... Тут тема не про объектно-ориентированные, а про реляционные БД. Какое наследование? Вы разве не знаете, что наследование реализуется в виде связи 1-к-1 между 2-мя таблицами? в виде связи 1-к-0..1 между 2-мя таблицами ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 17:42 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
registerersMasterZivОтвет на твой "супер-сложный" вопрос так же суперпрост: надо использовать наследование, оно же отношение подкатегории (между сущностями). Вжух -- и нет проблем! Тут тема не про объектно-ориентированные, а про реляционные БД. Какое наследование? Ты спрашивал -- я тебе ответил. Кстати, то же ответили тебе прямо или косвенно намекали на это некоторые другие отвечающие. Вопрос исчерпан, тему можно закрывать. Есть другие вопросы -- задавай отдельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 17:44 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Ennor Tiegaeltip78в3, клиенту напоминалка придёт про его незаконченную корзинуМмм? Анониму? tip78в4, через какое-то время незаконченные удаляютсяЕсли каждый заказ - это событие, то возможно. Когда их сотни тысяч в день, удаление из такой таблицы будет вести к фрагментации, а ребилдить индексы в 24*7 системе обычно непросто. Мне здравый смысл подсказывает, что можно сэкономить на дефрагментации, не записывая туда данные, которые могут быть впоследствии удалены. Вот что-бы отсутствовала фрагментация и не ст о ит данные удалять, поскольку не оформленный заказ, т.е. пустая корзина имеет определённую ценность. Банальная уже фраза "отрицательный результат - то-же результат" - работает. Думаю, что хороший проектировщик оставит пустые корзины в БД, поскольку АНОНИМ в наше время совсем и не аноним, есть время входа на сайт, есть попытки наполнить корзину товарами, есть интервалы между закидками товара в корзину, есть корреляции между товарами, брендами, да и много чего полезного можно нарыть. Не обязательно сразу "вываливать" весь потенциал в продакшн, но когда клиент созреет до развернутой аналитики, у вас для реализации его хотелок уже всё будет готово. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 17:45 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Кот МатроскинГлупости :) Вам надо как-то переформатировать свои сообщения - писать "Дяденька, а как сделать 2 разных заказа на одну корзину в случае хранения в одной таблице? Я не умею :(" - не исключено что так Вы скорее научитесь :) Какой-то детсадовский способ на понт брать. Если вы головой лупашите в стену, это не значит что я буду доказывать вам, что я тоже так могу. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 18:42 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Ennor TiegaelhVosttА уведомление: вы положили в корзину товары, но не оформили заказ? А уведомление, товар, который вы добавили в корзину появился в наличии?Кстати, да, совершенно забыл. Окей, согласен, корзину надо хранить в БД - но никто не требует, что это должна быть та же БД. Именно. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 18:43 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
MasterZivregisterersпропущено... Тут тема не про объектно-ориентированные, а про реляционные БД. Какое наследование? Ты спрашивал -- я тебе ответил. Кстати, то же ответили тебе прямо или косвенно намекали на это некоторые другие отвечающие. Вопрос исчерпан, тему можно закрывать. Есть другие вопросы -- задавай отдельно. Тогда надо определиться в терминологии, что называть наследованием в данном случае. К тому же, как быть в ситуации, когда одинаково названы поля в родительской и дочерней таблицах? А вообще, да, смотрю оффтоп потёк ручьём... По поводу главной темы топика, благодарю всех, что помогли уточнить суть вопроса, а именно - то, что в реляционной теории не существует способа ограничить возможность ссылаться двум и более дочерним сущностям на одну родительскую. И только родительская определяет свою принадлежность к той или иной дочерней сущности, тогда как все остальные, на нее ссылающиеся - мусорные. Введение дискриминатора в состав ключа, как предлагал известный персонаж из Простоквашино в посте 20787976 ещё более костыльное решение, нигде такого не встречал... В общем, подытожим. Вывод такой, что нельзя однозначно ответить на вопрос топика - "да" или "нет". Реляционка позволяет реализовать отношения вида тип-подтип, но контроль за ограничениями, о которых говорилось выше, ложится на приложение. З.Ы. А по логике корзины - целесообразно создать отдельный топик, тема довольно интересная, но здесь это оффтоп. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 19:50 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
registerersВведение дискриминатора в состав ключа, как предлагал известный персонаж из Простоквашино в посте 20787976 ещё более костыльное решение, нигде такого не встречал... Он из параллельной вселенной :) registerersВ общем, подытожим. Вывод такой, что нельзя однозначно ответить на вопрос топика - "да" или "нет". Реляционка позволяет реализовать отношения вида тип-подтип, но контроль за ограничениями, о которых говорилось выше, ложится на приложение. А где это не так вообще? Кто вообще закладывает какие-нибудь бизнес ограничения на реляционку? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 20:04 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
[quot hVostt]registerersКто вообще закладывает какие-нибудь бизнес ограничения на реляционку? Это не бизнес-ограничения, а обеспечение целостности и непротиворечивости данных ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 21:00 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
MasterZivskyANAпропущено... Вы разве не знаете, что наследование реализуется в виде связи 1-к-1 между 2-мя таблицами? в виде связи 1-к-0..1 между 2-мя таблицами И так и эдак бывает. В примере выше у меня Документ - это абстрактная сущность. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 21:30 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
registerersregisterersКто вообще закладывает какие-нибудь бизнес ограничения на реляционку? Это не бизнес-ограничения, а обеспечение целостности и непротиворечивости данных Ну я и спросил, где это не так в случае с наследованием? И какие трудности в терминологии? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 21:31 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
registerersТогда надо определиться в терминологии, что называть наследованием в данном случае. Наследованием в базе данных называют, внезапно, отношения наследования :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 21:33 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Ой всё... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 21:41 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Ennor Tiegaeltip78вы всё пытаетесь привязать к корзине какие-то события, которые непременно надо обрабатывать отдельно от заказа, но их НЕТ. И это ключевой момент.Наоборот - это у заказа есть действия, которые отсутствуют у корзины. Я писал, что атрибуты тоже отличаются - для корзины будет достаточно ( CustomerId, ItemId , Count); для детали заказа, очевидно, нет. Или это только мне очевидно, и надо реально объяснять? Что вы действительно упускаете, так это лес за деревьями. Данные в корзине по природе своей временные. Лично мне в базе они вообще не нужны - строго говоря, для них даже РСУБД не нужна, достаточно простейшего blob list. Поэтому я выношу таблицу корзины в отдельную БД, ставлю ей simple recovery и экономлю на бэкапах лога (в оракле, вроде бы, можно на уровне таблиц логирование отключать). Если что-то гавкнется, то потери будут минимальны и не критичны. Ennor Tiegaeltip78в4, через какое-то время незаконченные удаляютсяЕсли каждый заказ - это событие, то возможно. Когда их сотни тысяч в день, удаление из такой таблицы будет вести к фрагментации, а ребилдить индексы в 24*7 системе обычно непросто. Мне здравый смысл подсказывает, что можно сэкономить на дефрагментации, не записывая туда данные, которые могут быть впоследствии удалены. вы правильные вопросы поднимаете ) Когда будете писать свой магазин, они вам пригодятся. Объясняю: 1. когда вы посчитаете эти 100000 корзин, то окажется, что средний размер = 25 байт. Потому что там кроме нескольких цифр ничего нет. По-сравнению с еженочными обновлениями товаров от поставщиков это просто ПЫЛЬ. Если вас всё ещё что-то беспокоит, то "CREATE TABLE tbl (...) WITH (fillfactor = 90)" и autovacuum закроют для вас эту тему навсегда. Ну и потом, не надо их выкидывать прям так сразу, они вернутся, надо только верить )) зы: кстати, вы и персонал от клиентов отдельно держать хотите? 2. blob-list сложно/невозможно анализировать. А это информация, она нужна. Отдельная БД? ("горизонтальное масштабирование - ЗЛО " - цитирую разработчиков, видео ниже). *ять мы же только что про доп.таблицу говорили, а уже отдельная БД?? АСТАНАВИТЕСЬ!!1 3. "Данные в корзине по природе своей временные." Если корзина становится заказом, то они вечные. registerers Это не я извратил , это существующий паттерн Flat table костыльный, о чём я и писал (создаётся впечатление, что вы вообще не читали предыдущие посты). И да, есть красивая реляционная теория, а есть суровая практика и я не один раз встречал в ней решения на основе EAV, которые ложили апп на овер 100к айтемов. Поэтому рефакторили такие системы, в том числе применяя денормализацию. Кстати, Magento, тоже отказалась в свое время от EAV. Я вообще пример с магазином придумал потому что он многим знаком. Суть же задачи, которую я ставил состоит в том, возможно ли в денормализованных архитектурах БД выдержать условия однозначности и непротиворечивости реляционных связей? В случае Flat table (type-supertype), это невозможно, что было показано выше. Представьте, у вас есть родительская (supertype) таблица и две дочерние (subtype). Для определения того, с какой из дочерних таблиц заджойнить родительскую, нужно сначала проверить в ней значение поля Type. Вот лучше этот один запрос напишите, тогда и поговорим о реляционной алгебре ;-) таки нет, это ВЫ полезли в размножение таблиц и теперь хотите каких-то решений, чтобы не выяснять типы во всех таблицах. Разбили зачем-то корзину и заказ... ок, у EAV есть проблемы с джойнами (много джойнить много данных) и с запутанными запросами из третьих таблиц, но "flat", в который вы полезли, ещё хуже и мне не интересно такие задачки решать. Магенто может и отказался от EAV, но вот это структура их БД: Кстати, Космодемьянский ругал EAV тут (11:20): ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2017, 18:02 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
registerersВ общем, подытожим. Вывод такой, что нельзя однозначно ответить на вопрос топика - "да" или "нет". Реляционка позволяет реализовать отношения вида тип-подтип, но контроль за ограничениями, о которых говорилось выше, ложится на приложение. есть-же обьектно-ориентированные базы данных, используй их, там тебе будут и типы, и наследование и никаких проблем с маппингом на классы не будет и вообще с идеологией все прекрасно, прямо как в коммунизме. Но нет, почему-то в теории все хорошо, а на практике берут и используют реляционку Почему? А потому, что на практике таких проблем нет. Когда тебе надо получить определенный подтип, то он тебе уже известен и известна таблица с которой нужен джойн. Да, в случае использования одиночного int'ого ключа база не будет гарантировать, что в таблица ссылается на правильный тип, это не является практической проблемой т.к. в случае джойна с такой записью резалтсет будет просто пустой. Как и в случае если запись реально отсутствует в таблице подтипа, и реляционка тут опять "бессильна", ну не может она гарантировать что ты добавил эту запись в нужную таблицу. Не может завод Мерседес гарантировать, что на его машине ты не поедешь пахать поля с картошкой. Это не от завода зависит, и не от модели, а от водителя ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2017, 01:52 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
stenfordесть-же обьектно-ориентированные базы данных, используй их, там тебе будут и типы, и наследование и никаких проблем с маппингом на классы не будет и вообще с идеологией все прекрасно, прямо как в коммунизме. Но нет, почему-то в теории все хорошо, а на практике берут и используют реляционку Странное утверждение, на практике кто-то использует реляционку, а кто-то и MongoDB: Top 3 Node JS eCommerce platforms . ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2017, 09:53 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Да и тема использования не первый год обсуждается. Вот к примеру статья 10-го года: http://web.archive.org/web/20110713174947/http://kylebanker.com/blog/2010/04/30/mongodb-and-ecommerce/ ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2017, 10:01 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
skyANAСтранное утверждение, на практике кто-то использует реляционку, а кто-то и MongoDB: Top 3 Node JS eCommerce platforms . MongoDB НЕ является обьектно-ориентированной БД ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2017, 13:02 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
stenfordskyANAСтранное утверждение, на практике кто-то использует реляционку, а кто-то и MongoDB: Top 3 Node JS eCommerce platforms . MongoDB НЕ является обьектно-ориентированной БД Да не является. Я просто подумал, что Вы немного о другом. Изначальный-то вопрос звучит так: "Есть множество разных товаров... набор свойств (атрибутов) у них разный... как положить в корзину и то, и другое, и пятое-десятое?". C MongoDB это не проблема. Да и вообще для объектно-ориентированных данных документо-ориентированная БД в определённых смыслах больше подходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2017, 13:17 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Так, так, как уже выше заметили, куда там magento соскочило c EAV? :). Смотрим таблицы начинающиеся с "bingo" c EAV(eav_entity/eav_attribyte/eav_entity_type-->eav_entity_decimal) и их кол-во. ER schema magento 2.1.3 Community Edition "Космодемьянский ругал EAV тут (11:20)" - все ругают бедный EAV, тем более EAV/CR, заодно и ORM, но вот предложений, как выполнять требования бизнеса которые позволяет решать EAV/ORM (он часто и генерирует эти "жуткие" запросы), из разряда "How-to" ... молчок и обычно следует ... приходите к нам и за $$$ мы Вас научим :), что Вам не нужны такие задачи, и Вы вообще живёте неправильно, и всякие bitrix/1c/SAP/....прочие ERP, аналогично и.т.д. авторНе согласен - критикуй, критикуешь - предлагай, предлагаешь - делай, делаешь - отвечай! И да, как там поживает суррогатный ключ в теории :) ? Всё-таки надо побороть жадность, сгонять на pgConf, вживую его послушать, позадавать вопросы ... особенно про EAV и как быстро подстраиваться под изменчивый бизнес. Может просветит неразумного, а то мы все jsonb мучаем, и уже до jquery добрались, и огребаем по полной в надежде на развитие PG. EAV старый, медленный, и гибкий "антипаттерн" с которым все умеют работать и работают. И не у всех "BigData", "HighLoad++", "Машин лёрнинг" авторВот где карту открывали, туда и идите"/TOP1 с BigData. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2017, 18:02 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
BspleskМожет просветит неразумного, а то мы все jsonb мучаем, и уже до jquery добрались, и огребаем по полной в надежде на развитие PG. полагаю вы про Jsquery ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2017, 10:32 |
|
Реляционка тут бессильна?
|
|||
---|---|---|---|
#18+
Bsplesk и Вы вообще живёте неправильно, и всякие bitrix/1c/SAP/....прочие ERP, аналогично и.т.д. bitrix/1C/SAP - как раз не аналогично. Для тиражной системы, перед которой стоит задача "чтобы тысячи мартышек на местах могли нас допиливать, но не могли сломать" - да, EAV вполне неплохое и рабочее решение для этой задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2017, 10:56 |
|
|
start [/forum/search_topic.php?author=KA3AKOB&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
159ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 262ms |
total: | 543ms |
0 / 0 |