|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
Eugene Хочу спроектировать базу электроэнергетических устройств (имеется ввиду самый основной уровень, когда не рассматриваем элементы, детали устройств, коммуникационное оборудование, провод) Сначала взял стандартную схему БД подобного типа Но потом понял что нельзя делать одну табл Оборудование для ВСЕХ ТИПОВ устройств. В самом деле, в физике и электроэнергетики есть разные классификации каждого типа устройств, сам тип оборудования иногдв является не линейным а деревом. Так для типа Электродвигатель основные подтипы -постоянного-переменного тока. Для переменного тока -следующий уровень-синхронный-асинхронный Кроме того желательно отразить в БД не одну а несколько классификаций, причем разных для каждого типа устройства. Например, электрогенераторы - по виду выходного электр тока -Постоянного, переменного -по фазности выходного напряжения – на однофазные и трехфазные; -по типу используемого топлива - дизельный, бензиновый и газовый и т д т.е в отличие от приведенной выше схемы, под самой верхней сущностью ТИПОборудования должно стоять не одна табл ОБОРУДОВАНИЕ а НЕСКОЛЬКО, т.е. ЭЛЕКТРОДВИГАТЕЛИ , ЭЛЕКТРОГЕНЕРАТОРЫ, ИсточникиСВЕТА , ИсточникиВторичногоПитания (подтипы:хит (гальванич элем, батареи и акк), термобатареи, термоэлектр преобразователи, фотоэлектрич преобразователи...) Возникает вопрос о проектировании такой структуры. т.е база -это фактическое соединение почти на верхнем уровне разнородных сущностей таблиц. Можно ли так делать? Не имел опыт. Что ,Все запросы SELECT придется писать в форме SELECT CASE? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 09:47 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
eugene, Нужно реализовать бизнес-наследование. Например, в сущности ТипОборуд добавить поле КодРодительскогоТипа. Но лучше поддерживать множественное наследование, правда это будет дороже. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 10:00 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
eugene,Все запросы SELECT придется писать в форме SELECT CASE? Так как это EAV, запросы будут адскими, да. В таком случае всегда имеет смысл вести отдельно проекции, но это вообще не популярная практика. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 10:01 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
Поищите по ключевому слову EAV ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 10:06 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
hVostt, расшифруйте термин EAV ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 10:25 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
hVostt, Что имеете ввиду под термином бизнес-наследование? У меня под рукой самая простая СУБД -MS Access. Дальше SQL Server и глядеть не хочу. Если имеете ввиду объектно-ориентированные типа Jasmine - это мне не по карману Я думаю что все-таки надо начать с древовидного классификатора Тип оборудования и запихнуть его в таблицу как запихивают в СУБД деревья. Правда у моей предметной области получается классификация не иерархическая а сетевая ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 10:30 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
eugeneКроме того желательно отразить в БД не одну а несколько классификаций, причем разных для каждого типа устройства. Например, электрогенераторы - по виду выходного электр тока -Постоянного, переменного -по фазности выходного напряжения – на однофазные и трехфазные; -по типу используемого топлива - дизельный, бензиновый и газовый и т д Это называется фасетная классификация. Имеет вполне проработанные хорошие решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 10:36 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
eugeneВозникает вопрос о проектировании такой структуры. т.е база -это фактическое соединение почти на верхнем уровне разнородных сущностей таблиц. Можно ли так делать? Не имел опыт. Что ,Все запросы SELECT придется писать в форме SELECT CASE? Начните с того, что опишите как собираетесь использовать эти данные. Какие задачи должны решаться? Каталог оборудования только ради каталога лишен смысла. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 11:34 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
eugene, Подумайте над задачей, над тем, что в конечном счёте нужно. EAV гуглится, остальное пока рано. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 11:49 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
eugeneТак для типа Электродвигатель основные подтипы -постоянного-переменного тока. Для переменного тока -следующий уровень-синхронный-асинхронный Кроме того желательно отразить в БД не одну а несколько классификаций, причем разных для каждого типа устройства. https://habr.com/post/254773/ читайте, практикуйтесь пока до конца не поймёте хотя бы первые 3 формы, дальше не суйтесь ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 12:50 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 12:57 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
tip78 4 альтернативы EAV я бы не назвал их альтернативами ни при каком раскладе. EAV это динамическая модель атрибутов, которая всё же укладывается в реляционную структуру, а указанные inheritance это статическая, а LOB это вообще что угодно, без гарантий и контроля. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 13:12 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
hVostttip78 4 альтернативы EAV я бы не назвал их альтернативами ни при каком раскладе. ...+500. Все 4 практически непригодны для реальных условий. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 13:48 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
ну, поговоривают, что магенто перешло на flat tables (в списке толи 1, толи 3), сам правда не видел, не пользуюсь альтернатива в том плане, что это всё ещё таблицы я сам то предпочитаю всё что можно в редиске хранить ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 14:27 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
tip78я сам то предпочитаю всё что можно в редиске хранить сложные отчёты по редиске делали когда-нибудь? всёж инструмент надо выбирать не по принципу "предпочитаю", а исходя из задач и требований. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 15:03 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
hVostttip78я сам то предпочитаю всё что можно в редиске хранить сложные отчёты по редиске делали когда-нибудь? всёж инструмент надо выбирать не по принципу "предпочитаю", а исходя из задач и требований. 10 таблиц с фильтрами это сложные ? такое проще агрегировать, по возможности (а она практически всегда есть) редис он больше для внешнего мира нужен, а отчётность это скорее внутри, в CRM ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 17:23 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
L_argohVosttпропущено... я бы не назвал их альтернативами ни при каком раскладе. ...+500. Все 4 практически непригодны для реальных условий. Что скажете на это?! http://coussej.github.io/2016/01/14/Replacing-EAV-with-JSONB-in-PostgreSQL/ ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2018, 06:56 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
ПомидорЧто скажете на это?! http://coussej.github.io/2016/01/14/Replacing-EAV-with-JSONB-in-PostgreSQL/ Судя по статье, в решении с JSONB, нет схемы. В то время, как в реляционном исполнении она есть. Нельзя создать значение несуществующего Property. В JSONB можно, и набор значений свойст не контролируется со стороны БД. Ничего против не имею, даже за в отдельных случаях, но так сравнивать нельзя. Это разное. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2018, 08:49 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
ПомидорL_argoпропущено... +500. Все 4 практически непригодны для реальных условий. Что скажете на это?! http://coussej.github.io/2016/01/14/Replacing-EAV-with-JSONB-in-PostgreSQL/ Где это работает (и не хуже) кроме как в ПостГре ? Какова доля ПостГре на рынке СУБД ? зы: ничеталъ ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2018, 09:38 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
ПомидорL_argoпропущено... +500. Все 4 практически непригодны для реальных условий. Что скажете на это?! http://coussej.github.io/2016/01/14/Replacing-EAV-with-JSONB-in-PostgreSQL/ авторReplacing EAV with JSONB in PostgreSQL дальше можно не читать. JSONB никогда не заменит EAV, хотя бы потому, что там индексы много хуже работают. И сложный поиск там вообще труба. И не GiN, ни jsonb_path_ops, ни jsquery тут не помогут. Производительность падает и запросы становятся сложнее. Jsonb_path_ops хоть и быстрее монги, но он узконаправленный для очень простых случаев. Вот что сами разрабы пишут: авторНедостаток класса jsonb_path_ops заключается в том, что он не учитывает в индексе структуры JSON, не содержащие никаких значений {"a": {}}. Для поиска по документам, содержащих такие структуры, потребуется выполнить полное сканирование индекса, что довольно долго, поэтому jsonb_path_ops не очень подходит для приложений, часто выполняющих такие запросы. Таблица, где ID + json CREATE TABLE bad_tbl(id serial,json json) = НЕправильная таблица. В 11 придёт jsonB dictionary compression (jsonbc), вместе с SQL/JSON, но я всё-равно сомневаюсь, что он полностью заменит реляционную алгебру. Ну а сейчас, если по данным производится поиск/выборки/JOIN-ы/итд, то это отдельные колонки. JSONB нужен, чтобы хранить простыню данных о юзере, которые второго плана и редко достаются. Если туда редкие запросы, то GiN-индекс тащит, а если кол-во запросов растёт, то в отдельную колонку. 90 полезных слайдов про JSON ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2018, 11:53 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
* Таблица, где ID + json b CREATE TABLE bad_tbl(id serial,json json b ) = НЕправильная таблица. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2018, 11:54 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
hVosttПомидорЧто скажете на это?! http://coussej.github.io/2016/01/14/Replacing-EAV-with-JSONB-in-PostgreSQL/ Судя по статье, в решении с JSONB, нет схемы. В то время, как в реляционном исполнении она есть. Нельзя создать значение несуществующего Property. В JSONB можно, и набор значений свойст не контролируется со стороны БД. Ничего против не имею, даже за в отдельных случаях, но так сравнивать нельзя. Это разное. Ну может в этой статье ничего не сказано как ограничить администратора системы который собственно и решает надо добавлять новое поле или нет, но большой разницы с eav не вижу. Да, в случае с eav это ограничение на основе внешних ключей на уровне базы данных, а в случае с жейсон эту же логику ограничений можно сделать на уровне приложения. Скажем администратор системы решил быть таким и таким полям, а модератор хочет обойти это решение, хочет добавить дополнительное поле, это очень легко решается как и в случае с eav моделем. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2018, 17:45 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
L_argoПомидорпропущено... Что скажете на это?! http://coussej.github.io/2016/01/14/Replacing-EAV-with-JSONB-in-PostgreSQL/ Где это работает (и не хуже) кроме как в ПостГре ? Какова доля ПостГре на рынке СУБД ? зы: ничеталъ Тут важно (не обращая внимания на конкретную СУБД) действительно ли такое решение работает лучше или хуже. В случае с постгрес вроде добились хороших результатов, это в статье указано, значит пойдет тенденция и у других производителей субд. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2018, 17:49 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
tip78дальше можно не читать. JSONB никогда не заменит EAV, хотя бы потому, что там индексы много хуже работают. И сложный поиск там вообще труба. И не GiN, ни jsonb_path_ops, ни jsquery тут не помогут. Производительность падает и запросы становятся сложнее. Jsonb_path_ops хоть и быстрее монги, но он узконаправленный для очень простых случаев. Индексы там работают очень хорошо, это показано в статье. Чем же сложный поиск там труба? Можете на примере с eav моделю показать такой сложный запрос, сравним как эстетическую сторону вопроса так и производительную часть. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2018, 18:02 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
tip78* Таблица, где ID + json b CREATE TABLE bad_tbl(id serial,json json b ) = НЕправильная таблица. В случае с постгерс ни не заставляет все поля кроме первичного ключа загонять в жейсон поле. Жейсон поле просто приятная возможность чтобы не плодить лишние сущности в базе, причем очень эффективная. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2018, 18:08 |
|
|
start [/forum/topic.php?fid=32&msg=39673022&tid=1540020]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 166ms |
0 / 0 |