Что такое pivot tables или entity–attribute–value (EVA модель)

Существует альтернативный подход к проектированию таблиц в реляционных СУБД. Название полностью отражает суть: развёрнутая таблица (pivot table) представляет из себя развёрнутую на 90 градусов обычную таблицу.То есть названия полей будет располагаться не горизонтально, а вертикально. В минимальной реализации такая таблица будет состоять из двух полей: attribute и value, где attribute будет содержать уникальное имя атрибута, а value — его значение. Отсюда и второе название — entity–attribute–value (EVA модель). Работа с такими таблицами будет напоминать работу с key-value хранилищами. Самое интересное, что таблицы с подобной структурой можно создать в абсолютно любой СУБД и не требует никаких дополнительных настроек.

Недостатком такого подхода является то, что значения всех полей будут одного типа и чаще всего строкой. Если хранить в этом поле числовые значения, то это приведёт к не оптимальному хранению данных и при большом количестве записей будет не эффективно.

Можно сделать первичный ключ составным: item_id + attribute, либо item_id + attribute_id. По такому принципу часто строятся интернет-магазины для хранения постоянно растущего набора характеристик товаров.

Некоторые разработчики прибегают к некоторым оптимизациям и улучшениям и добавляют колонку с типом значения, которое будет конвертироваться при извлечении данных из БД. А в некоторых случаях добавляют ещё value-поля всех используемых типов, то есть таблица имеет следующий вид: attribute, type, int_value, string_value, double_value и т.п.

Можно извратиться ещё больше и для каждого типа значений создать отдельную таблицу atrribute + value.

Как работать с pivot table в MySQL

В этом разделе будут приведены примеры создания и работы с entity–attribute–value EVA таблицами вM ySQL. Но позже.