powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Реляционка тут бессильна?
25 сообщений из 169, страница 6 из 7
Реляционка тут бессильна?
    #39522002
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivОтвет на твой "супер-сложный" вопрос так же суперпрост:
надо использовать наследование, оно же отношение подкатегории (между сущностями).
Вжух -- и нет проблем!
Тут тема не про объектно-ориентированные, а про реляционные БД. Какое наследование?
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522003
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerersMasterZivОтвет на твой "супер-сложный" вопрос так же суперпрост:
надо использовать наследование, оно же отношение подкатегории (между сущностями).
Вжух -- и нет проблем!
Тут тема не про объектно-ориентированные, а про реляционные БД. Какое наследование?
Вы разве не знаете, что наследование реализуется в виде связи 1-к-1 между 2-мя таблицами?
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522009
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На примере MS SQL.

Код: sql
1.
2.
3.
4.
5.
CREATE TABLE fin.Document (
    Id INT IDENTITY(1,1) NOT NULL,
    CONSTRAINT PK_Document PRIMARY KEY CLUSTERED (Id)
)
GO



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE fin.Invoice (
    Id INT NOT NULL,
    CONSTRAINT PK_Invoice PRIMARY KEY CLUSTERED (Id)
)
GO

ALTER TABLE fin.Invoice ADD CONSTRAINT FK_Invoice_Document FOREIGN KEY(Id) REFERENCES fin.Document (Id)
GO

ALTER TABLE fin.Invoice CHECK CONSTRAINT FK_Invoice_Document
GO
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522011
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAregisterersпропущено...

Тут тема не про объектно-ориентированные, а про реляционные БД. Какое наследование?
Вы разве не знаете, что наследование реализуется в виде связи 1-к-1 между 2-мя таблицами?

в виде связи 1-к-0..1 между 2-мя таблицами
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522016
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerersMasterZivОтвет на твой "супер-сложный" вопрос так же суперпрост:
надо использовать наследование, оно же отношение подкатегории (между сущностями).
Вжух -- и нет проблем!
Тут тема не про объектно-ориентированные, а про реляционные БД. Какое наследование?

Ты спрашивал -- я тебе ответил. Кстати, то же ответили тебе прямо или косвенно намекали на это некоторые другие
отвечающие.

Вопрос исчерпан, тему можно закрывать.
Есть другие вопросы -- задавай отдельно.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522017
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor Tiegaeltip78в3, клиенту напоминалка придёт про его незаконченную корзинуМмм? Анониму?
tip78в4, через какое-то время незаконченные удаляютсяЕсли каждый заказ - это событие, то возможно. Когда их сотни тысяч в день, удаление из такой таблицы будет вести к фрагментации, а ребилдить индексы в 24*7 системе обычно непросто. Мне здравый смысл подсказывает, что можно сэкономить на дефрагментации, не записывая туда данные, которые могут быть впоследствии удалены.

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

Какой-то детсадовский способ на понт брать. Если вы головой лупашите в стену, это не значит что я буду доказывать вам, что я тоже так могу.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522038
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor TiegaelhVosttА уведомление: вы положили в корзину товары, но не оформили заказ? А уведомление, товар, который вы добавили в корзину появился в наличии?Кстати, да, совершенно забыл. Окей, согласен, корзину надо хранить в БД - но никто не требует, что это должна быть та же БД.

Именно.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522056
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivregisterersпропущено...

Тут тема не про объектно-ориентированные, а про реляционные БД. Какое наследование?

Ты спрашивал -- я тебе ответил. Кстати, то же ответили тебе прямо или косвенно намекали на это некоторые другие
отвечающие.

Вопрос исчерпан, тему можно закрывать.
Есть другие вопросы -- задавай отдельно.
Тогда надо определиться в терминологии, что называть наследованием в данном случае. К тому же, как быть в ситуации, когда одинаково названы поля в родительской и дочерней таблицах?

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

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

З.Ы. А по логике корзины - целесообразно создать отдельный топик, тема довольно интересная, но здесь это оффтоп.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522061
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerersВведение дискриминатора в состав ключа, как предлагал известный персонаж из Простоквашино в посте 20787976 ещё более костыльное решение, нигде такого не встречал...

Он из параллельной вселенной :)


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

А где это не так вообще?
Кто вообще закладывает какие-нибудь бизнес ограничения на реляционку?
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522072
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot hVostt]registerersКто вообще закладывает какие-нибудь бизнес ограничения на реляционку?
Это не бизнес-ограничения, а обеспечение целостности и непротиворечивости данных
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522085
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivskyANAпропущено...

Вы разве не знаете, что наследование реализуется в виде связи 1-к-1 между 2-мя таблицами?

в виде связи 1-к-0..1 между 2-мя таблицами
И так и эдак бывает. В примере выше у меня Документ - это абстрактная сущность.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522087
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerersregisterersКто вообще закладывает какие-нибудь бизнес ограничения на реляционку?
Это не бизнес-ограничения, а обеспечение целостности и непротиворечивости данных

Ну я и спросил, где это не так в случае с наследованием? И какие трудности в терминологии?
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522089
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerersТогда надо определиться в терминологии, что называть наследованием в данном случае.
Наследованием в базе данных называют, внезапно, отношения наследования :)
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522093
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой всё...
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522233
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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):
YouTube Video
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522289
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerersВ общем, подытожим. Вывод такой, что нельзя однозначно ответить на вопрос топика - "да" или "нет". Реляционка позволяет реализовать отношения вида тип-подтип, но контроль за ограничениями, о которых говорилось выше, ложится на приложение.

есть-же обьектно-ориентированные базы данных, используй их, там тебе будут и типы, и наследование и никаких проблем с маппингом на классы не будет и вообще с идеологией все прекрасно, прямо как в коммунизме. Но нет, почему-то в теории все хорошо, а на практике берут и используют реляционку
Почему? А потому, что на практике таких проблем нет. Когда тебе надо получить определенный подтип, то он тебе уже известен и известна таблица с которой нужен джойн. Да, в случае использования одиночного int'ого ключа база не будет гарантировать, что в таблица ссылается на правильный тип, это не является практической проблемой т.к. в случае джойна с такой записью резалтсет будет просто пустой. Как и в случае если запись реально отсутствует в таблице подтипа, и реляционка тут опять "бессильна", ну не может она гарантировать что ты добавил эту запись в нужную таблицу. Не может завод Мерседес гарантировать, что на его машине ты не поедешь пахать поля с картошкой. Это не от завода зависит, и не от модели, а от водителя
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522303
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stenfordесть-же обьектно-ориентированные базы данных, используй их, там тебе будут и типы, и наследование и никаких проблем с маппингом на классы не будет и вообще с идеологией все прекрасно, прямо как в коммунизме. Но нет, почему-то в теории все хорошо, а на практике берут и используют реляционку
Странное утверждение, на практике кто-то использует реляционку, а кто-то и MongoDB: Top 3 Node JS eCommerce platforms .
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522305
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и тема использования не первый год обсуждается.
Вот к примеру статья 10-го года: http://web.archive.org/web/20110713174947/http://kylebanker.com/blog/2010/04/30/mongodb-and-ecommerce/
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522333
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAСтранное утверждение, на практике кто-то использует реляционку, а кто-то и MongoDB: Top 3 Node JS eCommerce platforms .
MongoDB НЕ является обьектно-ориентированной БД
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522336
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stenfordskyANAСтранное утверждение, на практике кто-то использует реляционку, а кто-то и MongoDB: Top 3 Node JS eCommerce platforms .
MongoDB НЕ является обьектно-ориентированной БД
Да не является. Я просто подумал, что Вы немного о другом.

Изначальный-то вопрос звучит так: "Есть множество разных товаров... набор свойств (атрибутов) у них разный... как положить в корзину и то, и другое, и пятое-десятое?".

C MongoDB это не проблема. Да и вообще для объектно-ориентированных данных документо-ориентированная БД в определённых смыслах больше подходит.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522431
Bsplesk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так, так, как уже выше заметили, куда там 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.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522624
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BspleskМожет просветит неразумного, а то мы все jsonb мучаем, и уже до jquery добрались, и огребаем по полной в надежде на развитие PG.
полагаю вы про Jsquery
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522633
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bsplesk и Вы вообще живёте неправильно, и всякие bitrix/1c/SAP/....прочие ERP, аналогично и.т.д.

bitrix/1C/SAP - как раз не аналогично.
Для тиражной системы, перед которой стоит задача "чтобы тысячи мартышек на местах могли нас допиливать, но не могли сломать" - да, EAV вполне неплохое и рабочее решение для этой задачи.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39522974
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerers
Кстати, если это не костыль, то напишите JOIN-запрос для такого кейса)))
Что именно хотите видеть в результатах? И допишите реальные реквизиты у таблиц...
...
Рейтинг: 0 / 0
25 сообщений из 169, страница 6 из 7
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Реляционка тут бессильна?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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