Я разрабатываю свою базу данных / домен для приложения электронной коммерции, и мне сложно понять, как хранить продукты.
На сайте будет продаваться широкий ассортимент товаров: ручки, стринги, татуировки, зонтики, все что угодно. Каждый из этих продуктов будет иметь несколько общих атрибутов: высоту, ширину, длину, вес и т. Д., Но у некоторых продуктов есть особые данные. Например, ручки имеют разные цвета чернил, а наконечники / крышки и брошюры могут иметь разные типы складок. Пока что я придумал около 20+ дополнительных атрибутов, но эти атрибуты могут применяться только к 1% товаров на веб-сайте.
Поэтому мне интересно, уместно ли реализовать модель EAV для обработки дополнительных данных. Помните, что, когда клиенты просматривают сайт во внешнем интерфейсе, будет боковая панель фильтрации, как на eBay и carsales.com.au. (Так что, имея в виду, что будет довольно много запросов)
Я не считаю практичным реализовывать наследование таблиц классов, поскольку система должна оставаться гибкой. Это потому, что в будущем у нас может появиться больше атрибутов с новыми типами продуктов.
Еще я подумал об использовании базы данных NoSQL (возможно, MongoDB), однако у меня мало опыта работы с этими типами баз данных, решит ли это мою проблему?
Обзор вариантов:
- Единая сущность продуктов с большим количеством столбцов
- Сущность с отдельными атрибутами (EAV)
- Переключиться на постоянство без схемы
Я нахожусь в процессе создания прототипа с сущностью атрибутов, чтобы увидеть, насколько он гибкий, и тестирую производительность и насколько выходит из-под контроля запросы.
РЕДАКТИРОВАТЬ: Я, конечно, открыт для любых других решений.