Pregunta

He estado buscando una solución de base de datos que permita campos y valores definidos por el usuario (permitiendo un número ilimitado).A primera vista, EAV parecía la solución adecuada, pero después de leer un poco ya no estoy seguro.

¿Cuáles son los pros y los contras de EAV?

¿Existe un método de base de datos alternativo para permitir atributos/campos y valores definidos por el usuario?

¿Fue útil?

Solución

Esto no debe considerarse una respuesta exhaustiva, sino sólo algunos puntos sobre el tema.

Dado que la pregunta también está etiquetada con el [sql] etiqueta, déjame decirte que, en general, bases de datos relacionales no son particularmente adecuados para almacenar datos utilizando el AVE modelo.Aún puede diseñar un modelo EAV en SQL, pero tendrá que sacrificar muchas ventajas que ofrecería una base de datos relacional.No sólo no podrá imponer la integridad referencial, utilizar tipos de datos SQL para los valores y aplicar atributos obligatorios, sino que incluso las consultas más básicas pueden resultar difíciles de escribir.De hecho, para superar esta limitación, varias soluciones EAV se basan en la duplicación de datos, en lugar de unirlas con tablas relacionadas, lo que, como puedes imaginar, tiene muchos inconvenientes.

Si realmente necesita un diseño sin esquema, "que permita un número ilimitado de atributos", lo mejor que puede hacer probablemente sea utilizar un No SQL solución.Aunque las debilidades de EAV en relación con las bases de datos relacionales también se aplican a las alternativas NoSQL, se le ofrecerán funciones adicionales que son difíciles de lograr con las bases de datos SQL convencionales.Por ejemplo, normalmente los almacenes de datos NoSQL se pueden escalar mucho más fácilmente que las bases de datos relacionales, simplemente porque fueron diseñados para resolver algún tipo de problema de escalabilidad y eliminaron intencionalmente características que dificultan el escalado.

Muchas plataformas de computación en la nube (como las ofrecidas por Amazonas, Google y microsoft) presentan almacenes de datos basados ​​en el modelo EAV, donde se puede asociar una cantidad arbitraria de atributos con una entidad determinada.Si está considerando implementar su aplicación en la nube, puede considerar esto como una ventaja comercial y técnica, porque la fuerte competencia entre los grandes proveedores está elevando las relaciones valor-coste a niveles muy altos. aumentando continuamente las funciones y reduciendo los costos financieros y de implementación.

Otros consejos

Tener un vistazo a posgtres hstore http://www.postgresql.org/ docs / 9,0 / static / hstore.html esto va a hacer exactamente lo que quiere sin la mayoría de las desventajas

El corrientes Plataforma propone el camino alternativo basado en Streams ( En realidad, es el modelo de dominio ), campos y misiones entidades.

  

¿Hay un método alternativo para permitir que la base de datos de atributos de usuario / campos y valores definidos?

Una alternativa es cambiar el esquema de base de datos basado en la entrada del usuario:., Por ejemplo, cuando el usuario quiere un nuevo campo, a continuación, agregar una columna correspondiente a la base de datos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top