Aunque minimalista como se muestra, la tabla de atributos de Model2 introduce el concepto de metadatos en la mezcla, con todo lo bueno que viene de ello. Hay otras ventajas para Model2, por ejemplo, las ganancias de rendimiento asociado con un tamaño de fila más pequeño (de la tabla de valores), pero me gustaría centrarme en el concepto de metadatos.
Incluso tal cual La tabla de atributos de Model2 constituye un repositorio de todos los atributos válidos (con el modelo 1, sería necesario ejecutar una consulta agregada para obtener dicha lista). Además, y tal cual , el repositorio es suficiente para introducir restricciones de clave externa para ayudar a mantener la integridad del conjunto de datos (con el Modelo 1, se necesitarían formas externas de validación de los valores almacenados en la columna de atributos).
Con unas pocas adiciones simples, la tabla de atributos puede convertirse en un depósito versátil que se puede utilizar para varios propósitos. Por ejemplo, la tabla puede incluir algunos de los siguientes
- información como el nombre fácil de mostrar de cada atributo
- algunos indicadores que indican el tipo de campo (numérico, cadena, fecha, etc.), para un manejo/procesamiento diferenciado
- la tabla de valor particular donde se almacena el atributo subyacente (el modelo solo muestra una tabla, pero la optimización/escalado a veces solicita dividir las tablas)
- el hecho de que el atributo se puede almacenar como su propia columna en la tabla "Valor" (nuevamente una forma de optimización, esencialmente obteniendo lo mejor de ambos mundos:la flexibilidad del esquema del modelo EAV pero el rendimiento del tradicional modelo relacional de los atributos más utilizados y/o más comunes a todas las entidades.
- la capacidad de cambiar el nombre de los atributos, sin alterar la tabla principal. Cambios solo a nivel de metadatos.
- varias semánticas orientadas a la aplicación. Por ejemplo, indicadores de que un atributo en particular debe ofrecerse como uno de los campos de búsqueda básica versus avanzada.
En pocas palabras, la tabla de atributos se convierte en un recurso que permite que la aplicación esté verdaderamente basada en datos (o más precisamente, meta impulsado por datos). De hecho, también le puede gustar una tabla de entidades, es decir, una donde se recopilan los metadatos relacionados con los distintos tipos de entidades:cuáles son los diferentes tipos de entidades, qué atributos están permitidos para qué tipo de entidad, etc.
Ahora... presta atención al comentario de zerkms , debajo de la pregunta misma. A pesar de todos sus beneficios, el modelo EAV también viene con su parte de inconvenientes y desafíos, como insinuó la complejidad de las consultas que vienen a la mente y también los problemas de rendimiento. Sin embargo, estas preocupaciones no deberían descalificar, a priori, EAV:hay muchos casos de uso en los que EAV es un mejor enfoque.
Asumiendo que EAV es la opción entonces Model2, o incluso algo un poco más sofisticado es definitivamente superior a model1.