Relación entre catálogo, esquema, usuario y instancia de base de datos

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:

  • instancia de servidor == base de datos == catalog == todos los datos gestionados por el mismo motor de ejecución
  • schema == espacio de nombres dentro de la base de datos, idéntico a la cuenta de usuario
  • usuario == schema owner == cuenta nombrada, idéntica a schema, que puede conectarse a la base de datos, que posee el esquema y usa objetos posiblemente en otros esquemas
  • para identificar cualquier objeto en el servidor en ejecución, necesita (nombre del esquema + nombre del objeto)

En PostgreSQL:

  • instancia de servidor == db cluster == todos los datos administrados por el mismo motor de ejecución
  • database == catalog == base de datos única dentro del clúster de db, aislada de otras bases de datos en el mismo clúster de db
  • schema == namespace dentro de la base de datos
  • usuario == cuenta nombrada, que puede conectarse a la base de datos, poseer y usar objetos en cada base de datos permitida por separado
  • para identificar cualquier objeto en el servidor en ejecución, necesita (nombre de la base de datos + nombre del esquema + nombre del objeto)

En MySQL:

  • instancia de servidor == no identificado con el catálogo, solo un conjunto de bases de datos
  • database == schema == catalog == un espacio de nombres dentro del servidor.
  • usuario == cuenta nombrada, que puede conectarse al servidor y utilizar (pero no puede ser propietario de ningún objeto) objetos en una o más bases de datos
  • para identificar cualquier objeto en el servidor en ejecución, necesita (nombre de la base de datos + nombre del objeto)

En Microsoft SQL Server:

  • instancia de servidor == conjunto de bases de datos administradas
  • base de datos == calificador de espacio de nombres dentro del servidor, raramente denominado catálogo
  • schema == owner == espacio de nombres dentro de la base de datos, vinculado a las funciones de la base de datos, de manera predeterminada solo se usa dbo
  • usuario == cuenta nombrada, que puede conectarse al servidor y utilizar (pero no puede ser el propietario – el esquema funciona como propietario) objetos en una o más bases de datos
  • para identificar cualquier objeto en el servidor en ejecución, necesita (nombre de la base de datos + propietario + nombre del objeto)

Así que creo que la respuesta a sus preguntas es:

  1. 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.

  2. 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.

  3. 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.

    Intereting Posts