
Terminator
21.08.2018
17:13:06
Timur Solodovnikov будет жить. Поприветствуем!

Yaroslav
21.08.2018
17:14:07

Anton
21.08.2018
17:15:37
да. это просто обновление строками, а не таблицей. Я размечтался о другом :)))

Terminator
21.08.2018
17:37:00
Nina Shevchenko будет жить. Поприветствуем!

Google

Let Eat
21.08.2018
17:41:13
Подскажите, постгрес умеет пропускать джоины с шардированными таблицами если конкретный джоины там точно не может сработать? Раньше оно могло только если при планировании знало какие значения будут.

Yaroslav
21.08.2018
18:12:12

Konstantin
21.08.2018
18:37:56

Ilia
21.08.2018
18:56:55
почему?
Потому что EAV не анти паттерн. Просто другой подход. Есть плюсы и минусы.
Кто это считает это анти паттерном, просто неосиливший му#$@б.

Yaroslav
21.08.2018
19:02:12

Сергей
21.08.2018
19:02:55
Не антипаттерн это
Он просто мало кому нужен

Yaroslav
21.08.2018
19:03:20

Сергей
21.08.2018
19:03:40
Потому что часто он решает свою задачу
Динамические атрибуты

Yaroslav
21.08.2018
19:05:42
Потому что часто он решает свою задачу
Да, конечно... если эта задача состит в создании с трудом обрабатываемой кучи мусора в базе (причём эта куча пытается прикидываться "динамическими атрибутами"). ;)

Сергей
21.08.2018
19:06:04
У тя таких задач видимо не было

Yaroslav
21.08.2018
19:07:21

Google

Сергей
21.08.2018
19:07:41
Достигает и мусора нет

Yaroslav
21.08.2018
19:08:45

Сергей
21.08.2018
19:09:58
Мусор это лишние записи. Их нет

Yaroslav
21.08.2018
19:10:51

Сергей
21.08.2018
19:12:03
Вместо eav хранить в json? Есть предложения лучше?

Yaroslav
21.08.2018
19:12:44

Сергей
21.08.2018
19:13:19
Flat table не решает задачи eav...
А причес тут шестая нормальная форма? Как она поможет?

Yaroslav
21.08.2018
19:14:22

Сергей
21.08.2018
19:15:22
На момент запуска приложения я еще не знаю структуру данных. Я ее другими таблицами описываю и в рантайме пишу в eav

Yaroslav
21.08.2018
19:15:25

Сергей
21.08.2018
19:16:10

Yaroslav
21.08.2018
19:17:10

Сергей
21.08.2018
19:21:08
Вроде понял. То есть для каждого атрибута таблица?

Yaroslav
21.08.2018
19:23:08

Сергей
21.08.2018
19:23:50
А что делать, если заранее не знаю аттрибутов?
Я не праздно интересуюсь, я подобную задачу решал через еав и оч много думал об архитектуре. Мне реально надо было в рантайме все собирать

Yaroslav
21.08.2018
19:28:11
А что делать, если заранее не знаю аттрибутов?
А как Вы обычно эту задачу решаете?
Вот откуда Вы знаете, что у поставщика есть номер... что они вообще в таблице Vendor хранятся? ;)
И что значат другие поля в этой таблице, что с ними делать?
Т.е. здесь нужна какая-то поддержка этих динамических атрибутов в приложении.
Нередко делают для этого какой-нибудь "каталог метаданных", в виде таблиц в той же базе данных.

Антон
21.08.2018
19:29:16
В общем то я на той стадии думания и пока незнаю какой вариант выбрать

Google

Yaroslav
21.08.2018
19:29:37
Но я видел, как это делали и в приложении, кстати (синхронное изменение каталога в приложении и структуры в базе... но это как-то не очень).

Антон
21.08.2018
19:30:06
У меня есть типы товаров и к ним надо динамически привязывать и создавать атрибуты. Мало того у товара могут быть различные варианты с разными свойствами
Что можете сказать про json? Стоит ли вместо eav?
Конечно же помимо лёгкости решения хочется ещё и поддерживать это легко

Yaroslav
21.08.2018
19:34:02
Что можете сказать про json? Стоит ли вместо eav?
Понимаете, зависит от важности этого для Вас (Ваших пользователей).
Я вот видел ситуации, когда пользователей, на самом деле, устраивало, что там (в атрибутах) куча мусора, что запросы возвращают чёрт знает что, что нетривиальные тормозят. Если это сойдёт, то EAV — Ваш выбор. ;)
IMHO, JSON(b) может быть лучше EAV... но примерно так же, как тиф лучше чумы. :(


Антон
21.08.2018
19:34:49
Понимаете, зависит от важности этого для Вас (Ваших пользователей).
Я вот видел ситуации, когда пользователей, на самом деле, устраивало, что там (в атрибутах) куча мусора, что запросы возвращают чёрт знает что, что нетривиальные тормозят. Если это сойдёт, то EAV — Ваш выбор. ;)
IMHO, JSON(b) может быть лучше EAV... но примерно так же, как тиф лучше чумы. :(
Идеального решения все равно не найти. Я это понимаю.
Что из этих двух проще а реализации. Что быстрее во внедрении, и что легче поддерживать и понимать тоже важные факторы для меня
Решили пока просто построить с использованием jsonb несколько таблиц и поделать выборки
Код даже не писали

Yaroslav
21.08.2018
19:37:16

Антон
21.08.2018
19:37:38
Про какое решение именно вы имеете ввиду?

Yaroslav
21.08.2018
19:38:38

Антон
21.08.2018
19:39:33
Я незнаю что такое flat table увы (
Видимо это все атрибуты в таблице одной?
Тогда мы модифицируем саму таблицу при добавлении нового свойства?

Yaroslav
21.08.2018
19:40:36

Антон
21.08.2018
19:40:55
Блин сурово звучит

Yaroslav
21.08.2018
19:43:31
Блин сурово звучит
Ну а мне кажется, что добавить ссылочную целостность и правильные типы в EAV — гораздо суровее (и быстро начинает напоминать разработку недо-СУБД "внутри" существующей... и неспроста). ;)

Google

Антон
21.08.2018
19:44:07
Так я то вообще пока в сторону jsonb )))
+ метаданные в отдельной таблице
Есть таблица свойств и их описание. А в товаре значения свойств в jsonb
Все остальные sql

Yaroslav
21.08.2018
19:45:02

Ilia
21.08.2018
19:52:34

Yaroslav
21.08.2018
19:53:02

Сергей
21.08.2018
19:55:07

Yaroslav
21.08.2018
19:55:40

Антон
21.08.2018
19:56:47
Ну я подумал что буду валидировать с помощью таблицы метаданных. Мне в eav не нравится то что значение это строка
Или придется делать под инт одну таблицу, под строки другую
И так далеп

Yaroslav
21.08.2018
20:00:00

Антон
21.08.2018
20:00:43
Ну так раз данные неструктурированные так json же лучше?
Если не рассматривать 6ю форму и плоскую таблицу
Если у товара могут быть характеристики не известно какие то это что то типа документа
Понимаю что подходы разные. Сижу пытаюсь оправдать свой выбор в сторону jsonb если честно
Лукавить не буду

Yaroslav
21.08.2018
20:02:46
Ну так раз данные неструктурированные так json же лучше?
Если у вас действительно неструктурированные данные — да, лучше.
Только вот я что-то сомневаюсь. ;)
К примеру, Вас устроит такое: {"время высыхания":"5 метров"} ?
Если нет, то всё-таки какая-то структура у Вас есть. А если устроит, то почему бы и нет. :)

Google

Антон
21.08.2018
20:03:23
Я подумал сделать так. Что свойства будут иметь варианты значений
Как метаданные
За рамки которых выходить нельзя. А если можно то оно не участвует в фильтрации, а просто описательное поле и контент менеджер сам мудак что так заполнил. Но те свойства что в фильтрах они могут быть только из существующих значений и будут администрироваться
У свойства будет уникальный символьный код, которое будет ключом
Т.е. мы сами введем некоторые ограничения чтобы пытаться сохранить целостность данных


Yaroslav
21.08.2018
20:08:50
Т.е. мы сами введем некоторые ограничения чтобы пытаться сохранить целостность данных
Я не спорю, что при достаточных усилиях можно написать свою СУБД внутри другой.. только вот стоит ли?
> Но те свойства что в фильтрах они могут быть только из существующих значений и будут администрироваться
Про сортировку подумайте / не забудьте, если уж будете делать, кстати.
Но я это всё к тому, что Вы просто потратите какое-то (немалое?) время на реализацию того, что СУБД дала бы Вам и так... да и реализация, скорее всего, выйдет кривая. :(

Антон
21.08.2018
20:09:21
Да я понимаю что ты про каноничность
Но кажется что это ещё сложнее. Придется какой то генератор писать который будет добавлять поля в таблицу
И выглядит как то ещё опаснее. Особенно в нашем случае с отсутствием такого опыта


Yaroslav
21.08.2018
20:15:49
Сортировку подумали
Ну, как хотите. :(
Запросы ещё попробуйте. А, и ещё:
. В отличие от 6NF (и даже от EAV) JSONb-поля обновляются только целиком — если нужно обновить один из сотни атрибутов, переписываются все.
. Подумайте про индексацию, если будут нетривиальные запросы (можно посмотреть на expressional индексы).
(И да, если Вы таких индексов не будете использовать, производительность у Вас может быть не очень... по разным причинам).

Антон
21.08.2018
20:16:49
Я читал про gis индексы. Это они?

Yaroslav
21.08.2018
20:17:13

Антон
21.08.2018
20:17:30
Ой наверное gin index
Yaroslav читал что с версии 9.5 можно какой то ключ только обновить