Что знаешь про паттерн 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). В остальных случаях лучше избегать.