powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Стоит ли хранить значения атрибутов отдельными столбцами ?
25 сообщений из 88, страница 1 из 4
Стоит ли хранить значения атрибутов отдельными столбцами ?
    #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
Стоит ли хранить значения атрибутов отдельными столбцами ?
    #39871910
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user.maxСтоит при таком подходе, на каждые тип значения атрибута делать отдельный столбец ?

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

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

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

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

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

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

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

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

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

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

JSON индексируется
...
Рейтинг: 0 / 0
Стоит ли хранить значения атрибутов отдельными столбцами ?
    #39872405
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user.maxСтоит при таком подходе, на каждые тип значения атрибута делать отдельный столбец ?
Некоторое уточнение.
Если в качестве значения атрибута используется значение (другого) справочника, то необходимо делать поля, являющиеся ссылками на записи этого справочника. И тут на выбор приходится либо отказываться от (декларативного либо вообще) ограничения ссылочной целостности, либо делать разные поля для ссылок на разные справочники, либо делать одну ссылку на суперсправочник, если все справочники наследуются от него. Аналогично если требуется ссылка на документ или любую другую сущность в системе. В общем, это зависит от архитектуры.
...
Рейтинг: 0 / 0
Стоит ли хранить значения атрибутов отдельными столбцами ?
    #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
Стоит ли хранить значения атрибутов отдельными столбцами ?
    #39872750
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И тут на выбор приходится либо отказываться от (декларативного либо вообще) ограничения ссылочной целостности Ненужная фигня. Ни в одной ERP-системе это не используется. Ибо почти никаких проблем не решает, но успешно их создает.
...
Рейтинг: 0 / 0
Стоит ли хранить значения атрибутов отдельными столбцами ?
    #39872757
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoНенужная фигня. Ни в одной ERP-системе это не используется. Ибо почти никаких проблем не решает, но успешно их создает.

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

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

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

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

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

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

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

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

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

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

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


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