Para comparar bases de datos de diferentes proveedores (Oracle, SQL Server, DB2, MySQL y PostgreSQL) ¿cómo puedo identificar un objeto de manera única y necesito un catálogo? Por ejemplo, en DatabaseMetadata de Java, debo especificar catálogo y esquema fooPattern al menos.
¿Es cierto que el catálogo es solo una abstracción del almacenamiento de datos?
En Oracle:
En PostgreSQL:
En MySQL:
En Microsoft SQL Server:
dbo
Así que creo que la respuesta a sus preguntas es:
Depende de la implementación, si el nombre del catálogo es necesario para identificar objetos. El significado de “catálogo”, “esquema” y “base de datos” varía de una implementación a otra.
Sí, un catálogo es una abstracción del almacenamiento de datos. Creo que también debería definirse como un espacio de nombres aislado e independiente, pero no todos los motores SQL lo hacen.
La base de datos y el esquema están bastante bien definidos por todos los proveedores. El catálogo a veces es sinónimo de “base de datos” (al menos en Oracle y Postgres), a veces en “esquema” y, a veces, en ambos. El término catálogo también suele significar la recostackción de metadatos (también conocido como tablas del sistema).
Para DB2, el esquema se usa como espacios de nombres. Por lo tanto, si desea identificar de manera única un objeto en una base de datos, dirá * schema.object_name *. Esta es una forma muy práctica de lograr multitenancy. Puede tener un esquema separado para cada inquilino en su base de datos. Esto proporciona una buena separación de las preocupaciones tanto de seguridad como de los aspectos de gestión. Puede tener esquemas de 32K en una sola base de datos DB2.
Un catálogo en DB2 es simplemente una colección de tablas del sistema que contienen metadatos sobre la base de datos. En general, se considera una mala práctica acceder directamente a los objetos del catálogo. Lo mejor es usar las facilidades proporcionadas por su API (por ejemplo, JDBC) para explorar el catálogo y los metadatos que contiene.
DB2 también tiene otras capas de abstracción. Puede tener varias instancias de DB2 ejecutándose en la misma máquina. Cada instancia puede administrar 256 bases de datos separadas (cada una con 32K esquemas). El número de instancias de DB2 en un servidor está limitado solo por la cantidad de memoria que tiene disponible. En un momento dado tuvimos 120 instancias de DB2 (cada una con una base de datos y 10 conexiones) ejecutándose en Amazon EC2 m1.large. También puede tener múltiples instalaciones de DB2 en un solo servidor. es útil cuando se prueba una nueva versión a la que planea migrar. Lo encuentro confuso aunque a menudo me olvido de cambiar a la instalación correcta.
Lo que se menciona aquí sobre mysql en post por filiprem parece ser incorrecto. Según los siguientes enlaces, en mysql el catálogo jdbc corresponde a la base de datos. El esquema jdbc no es compatible.