Actualmente estoy diseñando una estructura de base de datos para la sección de productos de una plataforma de comercio electrónico. Debe diseñarse de tal forma que permita vender un número infinito de diferentes tipos de productos con un número infinito de atributos diferentes.Entity-Attribute-Value Table Design
E.g. Los atributos de una computadora portátil serían RAM, Tamaño de pantalla, Peso, etc. Los atributos de un libro serían Autor, ISBN, Editor, etc.
Parece que una estructura EAV sería la más adecuada.
- Seleccionar un producto
- producto forma parte de atributo de
- conjunto atributo contiene atributos x e y
- Attribute x es de tipo de datos de fecha y hora (valores almacenados en attribute_values_datetime)
- Atributo y es de datos escriba int (valores almacenados en attribute_values_int)
- Definición de cada atributo deno tes del tipo (i, e, x tiene tipo de columna -> DateType)
Asumiendo lo anterior, podría unirse a la selección de la tabla attribute_values_datetime para obtener los datos correctos sin obtener el conjunto de resultados y la construcción de una segunda consulta ahora que la mesa es conocida? Habría un gran impacto en el rendimiento construyendo una consulta de este tipo o sería el siguiente ser más adecuado (aunque menos funcional)
- Seleccionar un producto
- producto pertenece al conjunto de atributos
- conjunto atributo contiene atributos x e y
- Attribute x es de tipo de datos de fecha y hora pero almacena como texto en attribute_values
- Atributo y se tipo de datos int sino que se almacena como texto en attribute_values
No vaya con EAV. No importa los problemas de rendimiento (una tabla masiva que solo crecerá), considere cómo _query_ contra esto. EAV es normalización ido por la borda en la mayoría de los casos. – Oded
¿Qué vas a hacer con los atributos, querrás usarlos para filtrar? – Jodrell
Me inclino a estar de acuerdo con @Oded, terminas construyendo una base de datos dentro de una base de datos. Me pregunto qué enfoque toman los grandes minoristas en línea (los buenos). – Jodrell