В домене электронной коммерции обычно продукты должны иметь несколько атрибутов, например, имя, описание, цену, артикул, изображение, метаданные и так далее. И это количество свойств может увеличиваться/уменьшаться с течением времени в зависимости от его требований и использования. Что в конечном итоге может привести к изменению таблицы для добавления и удаления столбцов. И это также может привести к пустым столбцам, если этот атрибут больше не используется.

Потом мы наткнулись на EAV. Модель данных EAV обеспечивает гибкость таким образом, что вам не нужно изменять таблицы базы данных для добавления/удаления новых атрибутов продукта.

Согласно Википедии:

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

В нашем случае продуктом является Доктор, и в первую очередь нам нужно было решить две основные проблемы:

  1. Свести к минимуму или полностью исключить изменение таблицы
  2. И атрибуты должны иметь многоязычную поддержку

Структура таблицы:

Вместо хранения данных, например

EAV использует строку для каждого столбца

  • Entity : в данном случае это комбинация идентификатора врача и языка.
  • Атрибут: имя, квалификация, специализация и т. д.
  • Vзначение : значение атрибута для этого объекта.

ER-диаграмма

Особенность модели EAV

  1. Фокусируется на Сущности.
  2. Данные организованы, что упрощает поиск и вставку записей.
  3. Может обрабатывать новые атрибуты/свойства объекта без изменения таблицы.
  4. Сохраняются только непустые значения.

Резюме

Используя EAV, мы смогли обработать почти 16 атрибутов объекта Doctor всего с 4 столбцами, где, как и в случае плоской таблицы, было 16 столбцов. И это число только увеличивалось бы при введении новых атрибутов.