Tenemos que rediseñar una base de datos de POI heredada de MySQL a PostgreSQL. Actualmente, todas las entidades tienen 80-120 + atributos que representan propiedades individuales.es EAV - Híbrido una mala opción de diseño de base de datos
Se nos ha pedido que consideremos la flexibilidad y el buen enfoque de diseño para la nueva base de datos. Sin embargo el nuevo diseño debe permitir:
n no. de atributos/propiedades para cualquier entidad, es decir, no hay atributos para ninguna entidad no son fijos y pueden cambiar de forma regular.
Permitir a los administradores de contenido para añadir nuevas propiedades a entidades existentes sobre la marcha usando través de interfaces de administración en lugar de hacer cambios en el esquema de db todo el tiempo.
Hay bastantes discusiones acerca de los problemas de rendimiento de EAV pero si no vamos con un híbrido-EAV que terminan:
- tener muchas columnas vacías (y todavía vamos agregar nuevas columnas, incluso si el 99% de los datos no tienen esas propiedades)
- pasar más tiempo manteniendo la base de datos esp. cuando los atributos siguen cambiando
- hay manera de permitir que los administradores de contenido para añadir nuevas propiedades a entidades existentes
De todas formas esto es lo que estamos pensando en el nuevo diseño (ERD básica incluida):
tiene tablas separadas para cada entidad que contiene alguna información básica que es exclusiva, por ejemplo id, nombre, dirección, contacto, creado, etc. etc.
Tiene 2 tablas de tipo de atributo y atributo para almacenar información de propiedades.
Vincule cada entidad a un atributo usando una relación de muchos a muchos.
Almacenar direcciones en diferentes tablas y vincularlas a entidades que utilizan la clave externa.
Creemos que esto nos va a permitir ser más flexible a la hora de añadir, eliminar o actualizar las propiedades.
Este diseño, sin embargo, dará como resultado un mayor número de uniones al obtener datos, por ejemplo, para mostrar todos los "atributos" para un estadio dado, podríamos tener una consulta con más de 20 combinaciones para obtener todos los atributos relacionados en una sola fila.
¿Cuáles son sus pensamientos sobre este diseño y cuál sería su consejo para mejorarlo?
Gracias por leer.
Mire si el uso de bases de datos NOSQL ayudará? http://nosql-database.org/ –
No necesita NoSQL para almacenar datos en JSON o XML en un campo en una tabla de base de datos, y con PostgreSQL puede crear índices funcionales sobre campos específicos – MkV
Campos en una base de datos de producción shouldn 'se agregará' sobre la marcha ', debe haber algún control de cambio para evitar un lío de datos. Evita esto haciendo un diseño inicial. Agregue tablas según corresponda, o campos a tablas existentes si el campo es 1-1 y no es demasiado perturbador para cambiar la tabla. – MkV