Estoy diseñando mi base de datos/dominio para una aplicación de comercio electrónico y estoy teniendo dificultades para descubrir cómo almacenar productos.¿Debo usar el modelo EAV?
El sitio web venderá una amplia gama de productos, bolígrafos, tangas, tatuajes, paraguas, todo. Cada uno de estos productos compartirá algunos atributos comunes: alto, ancho, largo, peso, etc. pero algunos productos tienen datos especiales. Por ejemplo, las plumas tienen diferentes colores de tinta y las puntas/tapas y folletos pueden tener diferentes tipos de pliegues. Hasta ahora, he pensado en más de 20 atributos adicionales, pero estos atributos solo pueden aplicarse al 1% de los productos en el sitio web.
Así que me pregunto si es apropiado implementar un modelo de EAV para manejar los datos adicionales. Teniendo en cuenta que cuando los clientes están viendo el sitio en la interfaz, habrá una barra lateral de filtrado como eBay y carsales.com.au. (Por lo tanto, teniendo en cuenta que habrá un poco de consultas)
No creo que sea práctico implementar la herencia de Class Table ya que el sistema debe seguir siendo flexible. Esto se debe a que, en el futuro, podremos tener más atributos con nuevos tipos de productos.
La otra cosa que he considerado es utilizar una base de datos NoSQL (probablemente MongoDB). Sin embargo, tengo poca experiencia con este tipo de bases de datos, ¿incluso resolverá mi problema?
Examen de las opciones:
- productos entidad individual con un montón de columnas
- independiente entidad atributos (EAV)
- Cambiar al esquema menor persistencia
estoy en el proceso de construir un prototipo con una entidad de atributos para ver qué tan flexible es, y probar el rendimiento y qué tan fuera de control obtiene la consulta.
EDIT: Estoy, por supuesto, abierto a cualquier otra solución.
¿Hay alguna razón en particular por la que está construyendo manualmente una aplicación de comercio electrónico? Podría ser difícil, peligroso y tal vez un poco innecesario ... –
Acabo de encontrar [esta pregunta] (http://stackoverflow.com/questions/870808/entity-attribute-value-database-vs-strict-relational-model- ecommerce-question) que parece ser muy similar a lo que estás preguntando. – BenV
@BenV, aunque la pregunta es similar, es probable que las respuestas sean bastante diferentes, particularmente en relación con Magento. Magento realmente luchó con el rendimiento de EAV inicialmente, pero lo han resuelto a través del almacenamiento en caché cuidadoso (consulta, modelo, html-block y página completa) y la desnormalización opcional. Estos son nuevos desarrollos desde que se hizo la pregunta, y es digna de volver a hacer la pregunta en ese contexto, en mi humilde opinión. –