Что знаешь про паттерн Entity-Attribute-Value

Python Senior Без компании
Что знаешь про паттерн Entity-Attribute-Value
Ответы
Паттерн Entity-Attribute-Value (EAV) — это модель данных, где сущности описываются парами атрибут-значение, а не фиксированными столбцами. Полезен для хранения динамических или редко используемых атрибутов. **Структура:** - **Entity (сущность)** — ID объекта (например, товар). - **Attribute (атрибут)** — характеристика (например, цвет). - **Value (значение)** — значение атрибута (например, "красный"). **Пример таблиц:** ``` CREATE TABLE entities (id INT PRIMARY KEY, name TEXT); CREATE TABLE attributes (id INT PRIMARY KEY, name TEXT); CREATE TABLE eav (entity_id INT, attr_id INT, value TEXT); ``` **Плюсы:** - Гибкость — можно добавлять атрибуты без изменения схемы. - Экономия места — не хранит NULL для отсутствующих атрибутов. **Минусы:** - Сложные запросы — JOIN-ы для получения полной записи. - Нет типизации — все значения в TEXT/VARCHAR. - Производительность — хуже, чем у классической схемы. **Когда использовать:** Для систем с часто меняющейся структурой данных (например, метаданные в CRM). В остальных случаях лучше избегать.