Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Проектирование БД Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
user.max
Member

Откуда:
Сообщений: 5
Подскажите, пожалуйста. Стоит задача хранения сущностей, атрибутов (динамически добавляются пользователем) и их значений. При этом типы атрибутов фиксированы: 5. Стоит при таком подходе, на каждые тип значения атрибута делать отдельный столбец ?


+----+-----------+------------+----------+-----------+--------------+------------+
| 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. Получить список атрибутов сущности и их значения.
4 окт 19, 21:25    [21987146]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48407

user.max
Стоит при таком подходе, на каждые тип значения атрибута делать отдельный столбец ?

Да.

Posted via ActualForum NNTP Server 1.5

4 окт 19, 21:32    [21987150]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58905
Блог
user.max
На какие грабли можно наступить при такой "оптимизации" хранения eav?

На грабли можно наступить, если этого не делать.
4 окт 19, 21:58    [21987156]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
user.max
Member

Откуда:
Сообщений: 5
softwarer, Dimitry Sibiryakov

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

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

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

С недостатками 1 варианта все очевидно. А вот между 2 и 3 по каким критериям определяться?
4 окт 19, 23:27    [21987183]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48407

user.max
а когда стоит для каждого типа выделять отдельную таблицу ?

Никогда.

Posted via ActualForum NNTP Server 1.5

5 окт 19, 00:28    [21987199]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58905
Блог
user.max
А вот между 2 и 3 по каким критериям определяться?

Очевидно, посмотреть на значения этого типа и решить, что больше подходит для их хранения: столбец или таблица.
5 окт 19, 01:02    [21987205]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
fkthat
Member

Откуда:
Сообщений: 1340
Если БД это MS SQL, то там есть тип данных sql_variant. Еще одна опция - отказаться вообще от EAV и ту часть аттрибутов, которые могут изменяться хранить в виде JSON/XML поля.
5 окт 19, 05:34    [21987234]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
msLex
Member

Откуда:
Сообщений: 6674
fkthat
Если БД это MS SQL, то там есть тип данных sql_variant. Еще одна опция - отказаться вообще от EAV и ту часть аттрибутов, которые могут изменяться хранить в виде JSON/XML поля.


А вы индексировать это потом как будуете?
5 окт 19, 08:09    [21987254]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48407

msLex
А вы индексировать это потом как будуете?

Никак. Эту денормализацию можно проделать только с полями, которые не участвуют в
поисковых запросах.

Posted via ActualForum NNTP Server 1.5

5 окт 19, 12:27    [21987294]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
fkthat
Member

Откуда:
Сообщений: 1340
msLex
А вы индексировать это потом как будуете?

Dimitry Sibiryakov
Никак.


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

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

JSON индексируется
6 окт 19, 09:24    [21987534]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
Сергей Васкецов
Member

Откуда:
Сообщений: 19621
user.max
Стоит при таком подходе, на каждые тип значения атрибута делать отдельный столбец ?

Некоторое уточнение.
Если в качестве значения атрибута используется значение (другого) справочника, то необходимо делать поля, являющиеся ссылками на записи этого справочника. И тут на выбор приходится либо отказываться от (декларативного либо вообще) ограничения ссылочной целостности, либо делать разные поля для ссылок на разные справочники, либо делать одну ссылку на суперсправочник, если все справочники наследуются от него. Аналогично если требуется ссылка на документ или любую другую сущность в системе. В общем, это зависит от архитектуры.
7 окт 19, 08:56    [21987922]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34508
user.max
Подскажите, пожалуйста. Стоит задача хранения сущностей, атрибутов (динамически добавляются пользователем) и их значений. При этом типы атрибутов фиксированы: 5. Стоит при таком подходе, на каждые тип значения атрибута делать отдельный столбец ?


+----+-----------+------------+----------+-----------+--------------+------------+
| 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. Получить список атрибутов сущности и их значения.



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

Да, можно сделать не как у тебя в одной таблице, а по таблице на каждый тип данных атрибута
7 окт 19, 16:12    [21988460]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
L_argo
Member

Откуда:
Сообщений: 924
И тут на выбор приходится либо отказываться от (декларативного либо вообще) ограничения ссылочной целостности
Ненужная фигня. Ни в одной ERP-системе это не используется. Ибо почти никаких проблем не решает, но успешно их создает.
7 окт 19, 16:46    [21988520]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
fkthat
Member

Откуда:
Сообщений: 1340
L_argo
Ненужная фигня. Ни в одной ERP-системе это не используется. Ибо почти никаких проблем не решает, но успешно их создает.


Создает проблему тем, что не дает наполнить БД гамнищем неконсистентными данными?
Первичные ключи тоже, наверное, не нужны - ведь проблемы создают.
7 окт 19, 16:55    [21988530]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48407

fkthat
L_argo
в одной ERP-системе это не используется.

не дает наполнить БД гамнищем
Всё правильно: говносистеме - говноданные. Это
консистентность.

Posted via ActualForum NNTP Server 1.5

7 окт 19, 17:07    [21988550]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
fkthat
Member

Откуда:
Сообщений: 1340
Сергей Васкецов
user.max
Стоит при таком подходе, на каждые тип значения атрибута делать отдельный столбец ?

Некоторое уточнение.
Если в качестве значения атрибута используется значение (другого) справочника, то необходимо делать поля, являющиеся ссылками на записи этого справочника. И тут на выбор приходится либо отказываться от (декларативного либо вообще) ограничения ссылочной целостности, либо делать разные поля для ссылок на разные справочники, либо делать одну ссылку на суперсправочник, если все справочники наследуются от него. Аналогично если требуется ссылка на документ или любую другую сущность в системе. В общем, это зависит от архитектуры.


Логично под значения справочника делать отдельные поля, т.к. по факту "id из справочника Города" это уже не "int", а другой тип данных, хоть и представлен в БД как "int".
8 окт 19, 04:39    [21988997]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
Сергей Васкецов
Member

Откуда:
Сообщений: 19621
L_argo
Ни в одной ERP-системе это не используется

Когда Вы такую чушь пишете, то необходимо уточнять, что речь идёт о тех двух ERP системах, которые Вы лично написали в полузабытьи.

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

)))))))))

fkthat
Логично под значения справочника делать отдельные поля, т.к. по факту "id из справочника Города" это уже не "int", а другой тип данных, хоть и представлен в БД как "int".

Да в том смысле, что должно быть два разных поля int_value int (обычное ручное значение) и id_value int (ссылка на справочник).
Нет в том смысле, что не должно быть двух разных полей id_city и id_warehouse, например (если мы говорим о ситуации с суперсправочником).
8 окт 19, 08:43    [21989065]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
fkthat
Member

Откуда:
Сообщений: 1340
Сергей Васкецов
Да в том смысле, что должно быть два разных поля int_value int (обычное ручное значение) и id_value int (ссылка на справочник).
Нет в том смысле, что не должно быть двух разных полей id_city и id_warehouse, например (если мы говорим о ситуации с суперсправочником).


Ну тогда только "суперсправочник". Я работал когда-то с БД где едва ли не все было по EAV и где надо и где не надо. EAV - это путь боли, страданий, и дрочева. Так-то, в общем-то, он нужен для ситуациии с "semistructured data", но именно для этой ситуации и ввели поддержку XML и, позже, JSON (я про MS SQL, но в других СУБД, наверняка, оно уже тоже давно есть).
8 окт 19, 13:41    [21989402]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
L_argo
Member

Откуда:
Сообщений: 924
Сергей Васкецов
Когда Вы такую чушь пишете, то необходимо уточнять, что речь идёт о тех двух ERP системах, которые Вы лично написали в полузабытьи.
Боюсь, что Вы, коллега пишете чушь, т.к. Вы просто не в теме.
Речь идет не о самописных, а о брендовых известных системах.
Это 1С, Navision, Axapta, SAP, JDE. На самом деле список длинный.
Думаю, что использование СЦ - редчайшее исключение в брендовых ERP-системах. Если вообще таковое есть. Не знаю ни одной.

ПС: Опубликуйте список хотя бы 3-4 брендовых ERP с использованием СЦ.
8 окт 19, 16:48    [21989662]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
Сергей Васкецов
Member

Откуда:
Сообщений: 19621
L_argo
Думаю, что использование СЦ - редчайшее исключение

Так редчайшее исключение или ни в одной не используется?
Вы уж определитесь.
Да и при чём тут брендовость?
9 окт 19, 09:02    [21990048]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58905
Блог
Сергей Васкецов
Да и при чём тут брендовость?

Брендовость здесь очень даже при чём. Автор называет те системы, разработчик которых

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

Отсутствие СЦ при таких требованиях очень даже логично.
9 окт 19, 09:25    [21990070]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
Сергей Васкецов
Member

Откуда:
Сообщений: 19621
softwarer, так изначально речи про брендовость вообще не было.

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

А сейчас некто мне рассказывает, что в ERP никто никогда это не использует. Причём в пример приводится совершенно конкретный класс ERP, который можно смело называть "впарил и забы(и)л".
9 окт 19, 09:45    [21990089]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
fkthat
Member

Откуда:
Сообщений: 1340
softwarer,

По тому что я видел в кастомных ERP есть стойкое впечачатление, что ERP в целом, мягко говоря, это не очень хороший пример того как и что лучше делать. :)
9 окт 19, 09:52    [21990091]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
fkthat
Member

Откуда:
Сообщений: 1340
Сергей Васкецов
"впарил и забы(и)л".

Там все именно так и делается - это сама по себе отрасль такая. Плюс разработка по принципу "Если Math.Pow(10, 15) обезьянам дать по печатной машинке, то за год они напечатают шекспировского "Гамлета"".
9 окт 19, 09:57    [21990100]     Ответить | Цитировать Сообщить модератору
 Re: Стоит ли хранить значения атрибутов отдельными столбцами ?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58905
Блог
Сергей Васкецов
Причём в пример приводится совершенно конкретный класс ERP, который можно смело называть "впарил и забы(и)л".

Именно так.
9 окт 19, 11:33    [21990220]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Проектирование БД Ответить