Можно ли создать базу данных, используя только одну таблицу схемы EAV (сущность-атрибут-значение)?

Как можно изящно решить задачу создания унифицированной базы данных для всех бизнес-сущностей проекта, чтобы избежать создания огромной таблицы с большим количеством полей и индексов? Какова практическая граница на количество записей в таком решении?
  • 13 апреля 2024 г. 21:29
Ответы на вопрос 2
Да, можно создать базу данных, используя только одну таблицу схемы EAV. В такой таблице каждая строка представляет собой пару "сущность-атрибут-значение", что позволяет хранить различные типы данных без создания отдельных таблиц для каждой сущности.

Однако, следует помнить, что такой подход может иметь недостатки, такие как сложность написания запросов, медленные процессы чтения и проблемы с производительностью при большом объеме данных.

Для более эффективного решения задачи создания унифицированной базы данных для всех бизнес-сущностей проекта, можно использовать архитектурный подход под названием "расширенная сущность-атрибут-значение" (EAV+). В этом случае можно создать несколько таблиц EAV, каждая из которых будет хранить значения для определенного типа сущностей, что позволит более эффективно работать с данными и уменьшить количество запрошенных атрибутов.

Практическая граница на количество записей в таком решении зависит от конкретного проекта, его характеристик и требований к производительности. Однако, чем больше записей в таблицах EAV, тем медленнее могут быть запросы к базе данных из-за необходимости динамического преобразования данных. Поэтому важно тщательно продумать структуру базы данных и выбрать оптимальное решение для конкретного случая.
Какие есть более изящные решения такой задачи?

Не пытаться реляционную субд певращать в документ-ориентированную, а взять сразу что-то, что расчитано на такие сценарии.
postgresql с jsonb-колонкой или какую-нибудь условную монгу.

Да и если тебе явно не нужно дать возможность пользователю сравнительно легко создавать собственные типы сущностей - тебе это и не нужно и вполне можно для разных сущностей использовать разные таблицы.

Какой практический лимит записей в таком решении?

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