Я разрабатываю свою базу данных/домен для приложения электронной коммерции, и мне сложно определить, как хранить продукты.Должен ли я использовать модель EAV?
На сайте будет продаваться широкий ассортимент продукции, ручки, стринги, татуировки, зонты, все. Каждый из этих продуктов будет иметь несколько общих атрибутов, высоты, ширины, длины, веса и т. Д., Но некоторые продукты имеют специальные данные. Например, ручки имеют разные цвета чернил, а кончики/крышки и брошюры могут иметь разные типы складок. До сих пор я придумал еще 20 дополнительных атрибутов, но эти атрибуты могут применяться только к 1% продуктов на веб-сайте.
Так что мне интересно, целесообразно ли реализовать модель EAV для обработки дополнительных данных. Помня о том, что, когда клиенты просматривают сайт в интерфейсе, появится боковая панель фильтрации, например, на eBay и carsales.com.au. (Таким образом, имея в виду, будет справедливая часть запросов)
Не думаю, что реализовать наследование класса Table практично, так как система должна оставаться гибкой. Это связано с тем, что в будущем мы можем иметь больше атрибутов в новых продуктах.
Другая вещь, которую я рассмотрел, - это использование базы данных NoSQL (возможно, MongoDB), однако у меня мало опыта работы с этими типами баз данных, она даже решит мою проблему?
Обзор вариантов:
- одного изделия предприятие с большим количеством столбцов
- Отдельные атрибуты объект (EAV)
- Переключить на схеме менее живучесть
Я в процесс создания прототипа с сущностью атрибутов, чтобы увидеть, насколько он гибкий, и проверить производительность и как неконтролируемый запрос.
EDIT: Я, конечно, открыт для любых других решений.
Есть ли особая причина, по которой вы создаете приложение для электронной коммерции? Это может быть сложно, опасно и, возможно, немного ненужно ... –
Только что нашел [этот вопрос] (http://stackoverflow.com/questions/870808/entity-attribute-value-database-vs-strict-relational-model- ecommerce-question), который, похоже, почти такой же, как и то, что вы просите. – BenV
@BenV, в то время как вопрос аналогичный, ответы, вероятно, будут совсем другими, особенно касающимися Magento. Первоначально Magento действительно занимался эффективностью EAV, но они решили это путем тщательного кэширования (запроса, модели, html-блока и полностраничной страницы) и дополнительной денормализации. Это новые события, так как этот вопрос был задан, и он заслуживает повторного рассмотрения вопроса в этом контексте, ИМХО. –