Гость
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Использование таблицы для хранения атрибутов сущности по принципу Key-Value / 25 сообщений из 75, страница 1 из 3
05.12.2019, 15:03
    #39898632
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
У меня есть основная таблица для хранения сущности, в которой довольно много столбцов. Периодически приходят требования на расширение списка атрибутов сущности. Во многих случаях новый атрибут нужен лишь для небольшого процента сущностей и я бы не хотел все больше раздувать таблицу, добавляя в нее столбцы, которые часто будут разреженные.
Поэтому я решил создать отдельную унифицированную таблицу для хранения произвольных атрибутов сущности. Она имеет столбцы: EntityId (ссылка на сущность). TypeId (тип значения атрибута), Key (имя ключа атрибута), TextValue, IntValue, BoolValue, DateValue.
На данный момент меня такое решение устраивает.

Насколько такой подход приветствуется при проектировании БД? Какие потенциальные минусы такого решения могут проявиться в перспективе?
...
Рейтинг: 0 / 0
05.12.2019, 15:25
    #39898656
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
Google "EAV".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.12.2019, 15:26
    #39898659
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
Interloper
Насколько такой подход приветствуется при проектировании БД? Какие потенциальные минусы такого решения могут проявиться в перспективе?

Просто будет много глупой еботни.

А все из-за глупой фобии
Interloper
я бы не хотел все больше раздувать таблицу, добавляя в нее столбцы, которые часто будут разреженные.
...
Рейтинг: 0 / 0
05.12.2019, 15:39
    #39898669
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
ёёёёё,

В чем глупость?
...
Рейтинг: 0 / 0
05.12.2019, 15:57
    #39898684
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
Interloper
ёёёёё,

В чем глупость?

Interloper
я бы не хотел все больше раздувать таблицу, добавляя в нее столбцы, которые часто будут разреженные.

- а в чем "ум"? Ты берешь на себя то, что уже давным-давно сделано в движке.
...
Рейтинг: 0 / 0
05.12.2019, 16:27
    #39898711
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
ёёёёё
Interloper
ёёёёё,

В чем глупость?

Interloper
я бы не хотел все больше раздувать таблицу, добавляя в нее столбцы, которые часто будут разреженные.

- а в чем "ум"? Ты берешь на себя то, что уже давным-давно сделано в движке.

Что именно сделано в движке?
...
Рейтинг: 0 / 0
05.12.2019, 16:31
    #39898715
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
Interloper
ёёёёё
пропущено...

пропущено...

- а в чем "ум"? Ты берешь на себя то, что уже давным-давно сделано в движке.

Что именно сделано в движке?

DDL, DML и вопросы оптимального хранения "пустых" полей.
...
Рейтинг: 0 / 0
05.12.2019, 17:02
    #39898737
полудух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
Interloper
Что именно сделано в движке?

нормализация
...
Рейтинг: 0 / 0
05.12.2019, 17:04
    #39898739
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
ёёёёё
Interloper
пропущено...

Что именно сделано в движке?

DDL, DML и вопросы оптимального хранения "пустых" полей.


Есть нюанс. Я работаю с ORM. Поэтому добавления нового атрибута также влечет за собой необходимость доработки сущностей ORM.
...
Рейтинг: 0 / 0
05.12.2019, 17:20
    #39898752
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
Interloper
ёёёёё
пропущено...

DDL, DML и вопросы оптимального хранения "пустых" полей.


Есть нюанс. Я работаю с ORM. Поэтому добавления нового атрибута также влечет за собой необходимость доработки сущностей ORM.


А с твоей схемой "key-value" сущности модифицироваться будут сами собой, понятно.
...
Рейтинг: 0 / 0
05.12.2019, 18:32
    #39898798
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
ёёёёё
Interloper
пропущено...


Есть нюанс. Я работаю с ORM. Поэтому добавления нового атрибута также влечет за собой необходимость доработки сущностей ORM.


А с твоей схемой "key-value" сущности модифицироваться будут сами собой, понятно.


Да, с такой схемой класс сущности меняться не будет при добавлении нового атрибута.
...
Рейтинг: 0 / 0
05.12.2019, 18:34
    #39898802
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
Interloper
ёёёёё
пропущено...


А с твоей схемой "key-value" сущности модифицироваться будут сами собой, понятно.


Да, с такой схемой класс сущности меняться не будет при добавлении нового атрибута.


И еще, у меня есть код для синхронизации изменений из БД в Elasticsearch. При добавлении атрибута как столбца в таблицу, придется править и этот код, в который хотелось бы лезть как можно реже.
...
Рейтинг: 0 / 0
05.12.2019, 19:17
    #39898825
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
Ну раз все в порядке - в чем вопрос?
...
Рейтинг: 0 / 0
06.12.2019, 11:00
    #39898976
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
InterloperНасколько такой подход приветствуется при проектировании БД? Какие потенциальные минусы такого решения могут проявиться в перспективе?
Key-value - это плохо. Прежде всего релиационную модель key-value ложатся херово, особенно если у тебя двухзвенка и самый лучший стак. Потом таблица станет толстой, тормозной и ты будешь спрашивать тут, как сделать pivot/unpivot, а я буду язвить и издеваться. Ты заплывешь жиром, облысеешь и станешь типичным ораклистом. Еще всё это сложно рефакторить, так что тебе обеспечено пассивно-агрессивное поведение и хроническая прокрастинация. А потом тебя выкинут с работы и наймут трех студентов-пистонщиков на твою зарплату.
Не делай key-value. А если уж делаешь, то не в РСУБД. А если в РСУБД, то это должна быть не двухзвенка на вложенках.
...
Рейтинг: 0 / 0
06.12.2019, 11:09
    #39898986
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
Interloper
Я работаю с ORM. Поэтому добавления нового атрибута также влечет за собой необходимость доработки сущностей ORM.

Уууу. Ну тогда делай, не думай. Хуже своей бд ты уже не сделаешь. В крайнем случае переложишь всё в какую-нибудь nosql типа redis или tarantool.
...
Рейтинг: 0 / 0
06.12.2019, 11:25
    #39898993
полудух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
чё-то анекдот вспомнился:
- медведь, а у тебя спички есть?
- не-а
- значит ты импотент
...
Рейтинг: 0 / 0
14.12.2019, 08:48
    #39902985
Програмер.Илюша
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
полудух
чё-то анекдот вспомнился:
- медведь, а у тебя спички есть?
- не-а
- значит ты импотент


Я его слышал в варианте: "Фурманов, а у тебя спички есть? …"
...
Рейтинг: 0 / 0
15.12.2019, 08:59
    #39903109
Riss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
Мне в тему другой анекдот вспоминается:

Подходит Бабушка к нарикам и спрашивает: "Как мне на пролетарскую улицу пройти?"
"Как в кайф, так и иди"

Делайте, как считаете нужным, а остальное субъективно...
...
Рейтинг: 0 / 0
16.12.2019, 11:23
    #39903323
Serguei
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
Interloper
У меня есть основная таблица для хранения сущности, в которой довольно много столбцов. Периодически приходят требования на расширение списка атрибутов сущности. Во многих случаях новый атрибут нужен лишь для небольшого процента сущностей и я бы не хотел все больше раздувать таблицу, добавляя в нее столбцы, которые часто будут разреженные.
Поэтому я решил создать отдельную унифицированную таблицу для хранения произвольных атрибутов сущности. Она имеет столбцы: EntityId (ссылка на сущность). TypeId (тип значения атрибута), Key (имя ключа атрибута), TextValue, IntValue, BoolValue, DateValue.
На данный момент меня такое решение устраивает.

Насколько такой подход приветствуется при проектировании БД? Какие потенциальные минусы такого решения могут проявиться в перспективе?


Не существует "правильных" или "неправильных" решений. Есть работающее решение и неработающее в конкретных условиях.
Я лично не всегда заморачиваюсь на том что все должно быть "по правилам". "Правильные" решения часто приводят к сложностям в сопровождении (например заказчики не хотят ставить обновления, которые касаются изменений структуры БД в четверг-пятницу, потому что админы хотят провести выходные дома с семьей), поэтому ничего не вижу зазорного в том, что в отдельных случаях отступить и сделать EAV. Но, конечно же, всю систему построить на EAV ИМХО- это утопия.
...
Рейтинг: 0 / 0
16.12.2019, 11:28
    #39903324
Nickfoster123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
Thanks for sharing
...
Рейтинг: 0 / 0
16.12.2019, 11:40
    #39903328
Serguei
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
crutchmaster
Key-value - это плохо. Прежде всего релиационную модель key-value ложатся херово, особенно если у тебя двухзвенка и самый лучший стак.


Если у тебя двухзвенка в 21м веке- это уже что то херово )
но в данном случае двухзвенка или 3х, если ты не правильно оперируешь данными - то ничего не поможет.

crutchmaster
А потом тебя выкинут с работы и наймут трех студентов-пистонщиков на твою зарплату.
Не делай key-value

Жути то нагнали... Побежал срочно выкорчевывать EAV ))
...
Рейтинг: 0 / 0
16.12.2019, 16:31
    #39903584
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
"Чтобы добиться успеха, надо принимать правильные решения" (с)
...
Рейтинг: 0 / 0
17.12.2019, 01:07
    #39903789
Sergei.Agalakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
Возможно следует разбить таблицу на несколько, может быть с общим предком. Ваш вариант работает, но я бы рассмотрел вариант с JSON для экстра аттрибутов, если потенциально каждая запись может иметь какие-то произвольные дополнительные аттрибуты.
...
Рейтинг: 0 / 0
17.12.2019, 08:33
    #39903839
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
Serguei
Жути то нагнали... Побежал срочно выкорчевывать EAV ))

Ты уже не сможешь, даже если захочешь. В этом вся и подлость. А когда понимаешь это, то уже поздно.
Serguei
если ты не правильно оперируешь данными

РСУБД никак не оперирует с EAV, кроме простейших выборок. Всё что угодно другое превратится в дикий изврат и тормоза. Извращенца, который с этим работает, вместе с его базой наблюдаю каждый день.
...
Рейтинг: 0 / 0
17.12.2019, 10:13
    #39903870
Serguei
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование таблицы для хранения атрибутов сущности по принципу Key-Value
crutchmaster

Ты уже не сможешь, даже если захочешь. В этом вся и подлость. А когда понимаешь это, то уже поздно.

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


crutchmaster

РСУБД никак не оперирует с EAV, кроме простейших выборок. Всё что угодно другое превратится в дикий изврат и тормоза. Извращенца, который с этим работает, вместе с его базой наблюдаю каждый день.


если вы не любите кошек -значит вы не умеете их готовить. С базами тоже самое ;)
Огульное использование EAV -да приведет к таким последствиям, но только огульное.;)
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Использование таблицы для хранения атрибутов сущности по принципу Key-Value / 25 сообщений из 75, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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