Гость
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Стоит ли хранить значения атрибутов отдельными столбцами ? / 25 сообщений из 88, страница 1 из 4
04.10.2019, 21:25
    #39871907
user.max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
Подскажите, пожалуйста. Стоит задача хранения сущностей, атрибутов (динамически добавляются пользователем) и их значений. При этом типы атрибутов фиксированы: 5. Стоит при таком подходе, на каждые тип значения атрибута делать отдельный столбец ?


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
+----+-----------+------------+----------+-----------+--------------+------------+
| id | entity_id | name       | type     | value_int | value_string | value_date |
+----+-----------+------------+----------+-----------+--------------+------------+
| 1  | 1         | size       | int      | 10        | null         | null       |
+----+-----------+------------+----------+-----------+--------------+------------+
| 2  | 1         | title      | string   | null      | product      | null       |
+----+-----------+------------+----------+-----------+--------------+------------+
| 3  | 1         | created_at | datetime | null      | null         | 2019.10.04 |
+----+-----------+------------+----------+-----------+--------------+------------+



На какие грабли можно наступить при такой "оптимизации" хранения eav?
Основные выборки:
1. Получить сущности у которых дата создания(или иной атрибут) в диапозоне x и y
2. Получить список атрибутов сущности и их значения.
...
Рейтинг: 0 / 0
04.10.2019, 21:32
    #39871910
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
user.maxСтоит при таком подходе, на каждые тип значения атрибута делать отдельный столбец ?

Да.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.10.2019, 21:58
    #39871916
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
user.maxНа какие грабли можно наступить при такой "оптимизации" хранения eav?
На грабли можно наступить, если этого не делать.
...
Рейтинг: 0 / 0
04.10.2019, 23:27
    #39871941
user.max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
softwarer, Dimitry Sibiryakov

Спасибо большое. Ламерский вопрос, а когда стоит для каждого типа выделять отдельную таблицу ?

Для EAV 3 варианта доступно:

1. Одно поле value varchar для всех типов
2. Для каждого типа отдельный столбец
3. Для каждой типа отдельная таблица

С недостатками 1 варианта все очевидно. А вот между 2 и 3 по каким критериям определяться?
...
Рейтинг: 0 / 0
05.10.2019, 00:28
    #39871953
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
user.maxа когда стоит для каждого типа выделять отдельную таблицу ?

Никогда.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.10.2019, 01:02
    #39871957
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
user.maxА вот между 2 и 3 по каким критериям определяться?
Очевидно, посмотреть на значения этого типа и решить, что больше подходит для их хранения: столбец или таблица.
...
Рейтинг: 0 / 0
05.10.2019, 05:34
    #39871977
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
Если БД это MS SQL, то там есть тип данных sql_variant . Еще одна опция - отказаться вообще от EAV и ту часть аттрибутов, которые могут изменяться хранить в виде JSON/XML поля.
...
Рейтинг: 0 / 0
05.10.2019, 08:09
    #39871987
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
fkthatЕсли БД это MS SQL, то там есть тип данных sql_variant . Еще одна опция - отказаться вообще от EAV и ту часть аттрибутов, которые могут изменяться хранить в виде JSON/XML поля.

А вы индексировать это потом как будуете?
...
Рейтинг: 0 / 0
05.10.2019, 12:27
    #39872006
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
msLexА вы индексировать это потом как будуете?

Никак. Эту денормализацию можно проделать только с полями, которые не участвуют в
поисковых запросах.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.10.2019, 09:24
    #39872139
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
msLexА вы индексировать это потом как будуете?
Dimitry SibiryakovНикак.

sql_variant индексируется как обычно (с некоторыми ограничениями)

XML индексируется

JSON индексируется
...
Рейтинг: 0 / 0
07.10.2019, 08:56
    #39872405
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
user.maxСтоит при таком подходе, на каждые тип значения атрибута делать отдельный столбец ?
Некоторое уточнение.
Если в качестве значения атрибута используется значение (другого) справочника, то необходимо делать поля, являющиеся ссылками на записи этого справочника. И тут на выбор приходится либо отказываться от (декларативного либо вообще) ограничения ссылочной целостности, либо делать разные поля для ссылок на разные справочники, либо делать одну ссылку на суперсправочник, если все справочники наследуются от него. Аналогично если требуется ссылка на документ или любую другую сущность в системе. В общем, это зависит от архитектуры.
...
Рейтинг: 0 / 0
07.10.2019, 16:12
    #39872709
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
user.maxПодскажите, пожалуйста. Стоит задача хранения сущностей, атрибутов (динамически добавляются пользователем) и их значений. При этом типы атрибутов фиксированы: 5. Стоит при таком подходе, на каждые тип значения атрибута делать отдельный столбец ?


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
+----+-----------+------------+----------+-----------+--------------+------------+
| id | entity_id | name       | type     | value_int | value_string | value_date |
+----+-----------+------------+----------+-----------+--------------+------------+
| 1  | 1         | size       | int      | 10        | null         | null       |
+----+-----------+------------+----------+-----------+--------------+------------+
| 2  | 1         | title      | string   | null      | product      | null       |
+----+-----------+------------+----------+-----------+--------------+------------+
| 3  | 1         | created_at | datetime | null      | null         | 2019.10.04 |
+----+-----------+------------+----------+-----------+--------------+------------+



На какие грабли можно наступить при такой "оптимизации" хранения eav?
Основные выборки:
1. Получить сущности у которых дата создания(или иной атрибут) в диапозоне x и y
2. Получить список атрибутов сущности и их значения.


Стоит.
У тебя будут правильные индексы и не будет нарушения доменной целостности данных.

Да, можно сделать не как у тебя в одной таблице, а по таблице на каждый тип данных атрибута
...
Рейтинг: 0 / 0
07.10.2019, 16:46
    #39872750
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
И тут на выбор приходится либо отказываться от (декларативного либо вообще) ограничения ссылочной целостности Ненужная фигня. Ни в одной ERP-системе это не используется. Ибо почти никаких проблем не решает, но успешно их создает.
...
Рейтинг: 0 / 0
07.10.2019, 16:55
    #39872757
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
L_argoНенужная фигня. Ни в одной ERP-системе это не используется. Ибо почти никаких проблем не решает, но успешно их создает.

Создает проблему тем, что не дает наполнить БД гамнищем неконсистентными данными?
Первичные ключи тоже, наверное, не нужны - ведь проблемы создают.
...
Рейтинг: 0 / 0
07.10.2019, 17:07
    #39872774
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
fkthatL_argoв одной ERP-системе это не используется.
не дает наполнить БД гамнищемВсё правильно: говносистеме - говноданные. Это
консистентность.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.10.2019, 04:39
    #39873094
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
Сергей Васкецовuser.maxСтоит при таком подходе, на каждые тип значения атрибута делать отдельный столбец ?
Некоторое уточнение.
Если в качестве значения атрибута используется значение (другого) справочника, то необходимо делать поля, являющиеся ссылками на записи этого справочника. И тут на выбор приходится либо отказываться от (декларативного либо вообще) ограничения ссылочной целостности, либо делать разные поля для ссылок на разные справочники, либо делать одну ссылку на суперсправочник, если все справочники наследуются от него. Аналогично если требуется ссылка на документ или любую другую сущность в системе. В общем, это зависит от архитектуры.

Логично под значения справочника делать отдельные поля, т.к. по факту "id из справочника Города" это уже не "int", а другой тип данных, хоть и представлен в БД как "int".
...
Рейтинг: 0 / 0
08.10.2019, 08:43
    #39873136
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
L_argoНи в одной ERP-системе это не используется
Когда Вы такую чушь пишете, то необходимо уточнять, что речь идёт о тех двух ERP системах, которые Вы лично написали в полузабытьи.

Dimitry SibiryakovВсё правильно: говносистеме - говноданные. Это консистентность.
)))))))))

fkthatЛогично под значения справочника делать отдельные поля, т.к. по факту "id из справочника Города" это уже не "int", а другой тип данных, хоть и представлен в БД как "int".
Да в том смысле, что должно быть два разных поля int_value int (обычное ручное значение) и id_value int (ссылка на справочник).
Нет в том смысле, что не должно быть двух разных полей id_city и id_warehouse, например (если мы говорим о ситуации с суперсправочником).
...
Рейтинг: 0 / 0
08.10.2019, 13:41
    #39873343
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
Сергей ВаскецовДа в том смысле, что должно быть два разных поля int_value int (обычное ручное значение) и id_value int (ссылка на справочник).
Нет в том смысле, что не должно быть двух разных полей id_city и id_warehouse, например (если мы говорим о ситуации с суперсправочником).

Ну тогда только "суперсправочник". Я работал когда-то с БД где едва ли не все было по EAV и где надо и где не надо. EAV - это путь боли, страданий, и дрочева. Так-то, в общем-то, он нужен для ситуациии с "semistructured data", но именно для этой ситуации и ввели поддержку XML и, позже, JSON (я про MS SQL, но в других СУБД, наверняка, оно уже тоже давно есть).
...
Рейтинг: 0 / 0
08.10.2019, 16:48
    #39873501
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
Сергей ВаскецовКогда Вы такую чушь пишете, то необходимо уточнять, что речь идёт о тех двух ERP системах, которые Вы лично написали в полузабытьи.Боюсь, что Вы, коллега пишете чушь, т.к. Вы просто не в теме.
Речь идет не о самописных, а о брендовых известных системах.
Это 1С, Navision, Axapta, SAP, JDE . На самом деле список длинный.
Думаю, что использование СЦ - редчайшее исключение в брендовых ERP-системах. Если вообще таковое есть. Не знаю ни одной.

ПС: Опубликуйте список хотя бы 3-4 брендовых ERP с использованием СЦ.
...
Рейтинг: 0 / 0
09.10.2019, 09:02
    #39873742
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
L_argoДумаю, что использование СЦ - редчайшее исключение
Так редчайшее исключение или ни в одной не используется?
Вы уж определитесь.
Да и при чём тут брендовость?
...
Рейтинг: 0 / 0
09.10.2019, 09:25
    #39873755
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
Сергей ВаскецовДа и при чём тут брендовость?
Брендовость здесь очень даже при чём. Автор называет те системы, разработчик которых

а) не сопровождает их и не решает связанные с ними проблемы
б) стремится плюхнуться на разные платформы, не обладающие совместимым инструментарием. начиная с 1С с её dbf-ами
в) не заинтересован в целостности данных и между раскладами "просигнализировать об ошибке" и "спрятать ошибку" однозначно предпочитает второе

Отсутствие СЦ при таких требованиях очень даже логично.
...
Рейтинг: 0 / 0
09.10.2019, 09:45
    #39873769
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
softwarer, так изначально речи про брендовость вообще не было.

Я в своей жизни участвовал в разработке с нуля 6.5 ERP (от одной заказчик отказался - возьмём её за половинку) для разных заказчиков в разных отраслях. Понятно, что для меня идеологически они были не с нуля, какие-то технические решения удалось мигрировать, но всё равно это разные СУБД, разная архитектура и т.п. Во всех без исключения была реализована ссылочная целостность, про уникальные индексы и говорить нечего. Причём как декларативно, так и на триггерах тоже было.

А сейчас некто мне рассказывает, что в ERP никто никогда это не использует. Причём в пример приводится совершенно конкретный класс ERP, который можно смело называть "впарил и забы(и)л".
...
Рейтинг: 0 / 0
09.10.2019, 09:52
    #39873771
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
softwarer,

По тому что я видел в кастомных ERP есть стойкое впечачатление, что ERP в целом, мягко говоря, это не очень хороший пример того как и что лучше делать. :)
...
Рейтинг: 0 / 0
09.10.2019, 09:57
    #39873777
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
Сергей Васкецов"впарил и забы(и)л".
Там все именно так и делается - это сама по себе отрасль такая. Плюс разработка по принципу "Если Math.Pow(10, 15) обезьянам дать по печатной машинке, то за год они напечатают шекспировского "Гамлета"".
...
Рейтинг: 0 / 0
09.10.2019, 11:33
    #39873852
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли хранить значения атрибутов отдельными столбцами ?
Сергей ВаскецовПричём в пример приводится совершенно конкретный класс ERP, который можно смело называть "впарил и забы(и)л".
Именно так.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Стоит ли хранить значения атрибутов отдельными столбцами ? / 25 сообщений из 88, страница 1 из 4
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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