Saltar al contenido

¿Cuál es la diferencia entre un catálogo y un esquema en una base de datos relacional?

Solución:

Mike Sherrill ‘Cat Recall’ dio una excelente respuesta. Agregaré simplemente un ejemplo: Postgres.

Clúster = Una instalación de Postgres

Cuando instala Postgres en una máquina, esa instalación se llama grupo. “Clúster” aquí no se entiende en el sentido de hardware de varias computadoras trabajando juntas. En Postgres, grupo se refiere al hecho de que puede tener varias bases de datos no relacionadas en funcionamiento utilizando el mismo motor de servidor de Postgres.

La palabra grupo también está definido por el estándar SQL de la misma manera que en Postgres. Seguir de cerca el estándar SQL es un objetivo principal del proyecto Postgres.

La especificación SQL-92 dice:

Un clúster es una colección de catálogos definida por la implementación.

y

Exactamente un clúster está asociado con una sesión SQL

Esa es una forma obtusa de decir que un clúster es un servidor de base de datos (cada catálogo es una base de datos).

Clúster> Catálogo> Esquema> Tabla> Columnas y filas

Entonces, tanto en Postgres como en SQL Standard tenemos esta jerarquía de contención:

  • Una computadora puede tener un grupo o varios.
  • Un servidor de base de datos es un grupo.
  • Un clúster tiene catálogos. (Catálogo = Base de datos)
  • Los catálogos tienen esquemas. (Esquema = espacio de nombres de tablas y límite de seguridad)
  • Los esquemas tienen mesas.
  • Las tablas tienen filas.
  • Las filas tienen valores, definido por columnas.
    Esos valores son los datos comerciales que interesan a sus aplicaciones y usuarios, como el nombre de la persona, la fecha de vencimiento de la factura, el precio del producto y la puntuación más alta del jugador. La columna define el tipo de datos de los valores (texto, fecha, número, etc.).

Diagrama que muestra cajas de anidación que representan cómo la conexión en un puerto lo lleva a un clúster (un servidor de base de datos) que contiene uno o más Catálogos (una base de datos), cada uno de los cuales contiene uno o más Esquemas (un espacio de nombres), cada uno de los cuales contiene tablas, cada uno de los cuales tiene filas.

Múltiples clústeres

Este diagrama representa un solo grupo. En el caso de Postgres, puede tener más de un clúster por computadora host (o sistema operativo virtual). Se suelen realizar varios clústeres para probar e implementar nuevas versiones de Postgres (por ejemplo, 9.0, 9.1, 9.2, 9.3, 9.4, 9.5).

Si tuvieras varios clústeres, imagina el diagrama de arriba duplicado.

Los diferentes números de puerto permiten que los múltiples clústeres vivan uno al lado del otro, todos en funcionamiento al mismo tiempo. A cada clúster se le asignará su propio número de puerto. Lo normal 5432 es solo el predeterminado y puede configurarlo usted mismo. Cada clúster está escuchando en su propio puerto asignado para las conexiones entrantes de la base de datos.

Escenario de ejemplo

Por ejemplo, una empresa podría tener dos equipos de desarrollo de software diferentes. Uno escribe software para administrar los almacenes mientras que el otro equipo crea software para administrar las ventas y el marketing. Cada equipo de desarrollo tiene su propia base de datos, felizmente inconsciente de la del otro.

Pero el equipo de operaciones de TI tomó la decisión de ejecutar ambas bases de datos en una sola computadora (Linux, Mac, lo que sea). Entonces en esa caja instalaron Postgres. Entonces, un servidor de base de datos (clúster de base de datos). En ese grupo, crean dos catálogos, un catálogo para cada equipo de desarrollo: uno llamado ‘almacén’ y otro llamado ‘ventas’.

Cada equipo de desarrollo usa muchas docenas de tablas con diferentes propósitos y roles de acceso. Entonces, cada equipo de desarrollo organiza sus tablas en esquemas. Por coincidencia, ambos equipos de desarrollo realizan un seguimiento de los datos contables, por lo que cada equipo tiene un esquema llamado “contabilidad”. Usar el mismo nombre de esquema no es un problema porque los catálogos tienen cada uno su propio espacio de nombres, por lo que no hay colisión.

Además, cada equipo crea finalmente una tabla con fines contables denominada “libro mayor”. Una vez más, no hay colisión de nombres.

Puede pensar en este ejemplo como una jerarquía …

  • Computadora (caja de hardware o servidor virtualizado)
    • Postgres 9.2 cluster (instalación)

      • warehouse catálogo (base de datos)

        • inventory esquema

          • [… some tables]
        • accounting esquema

          • ledger mesa
          • [… some other tables]
      • sales catálogo (base de datos)

        • selling esquema

          • [… some tables]
        • accounting esquema (coincidente con el mismo nombre que el anterior)

          • ledger tabla (coincidente con el mismo nombre que el anterior)
          • [… some other tables]
    • Postgres 9.3 grupo

      • [… other schemas & tables]

El software de cada equipo de desarrollo establece una conexión con el clúster. Al hacerlo, deben especificar qué catálogo (base de datos) es suyo. Postgres requiere que se conecte a un catálogo, pero no está limitado a ese catálogo. Ese catálogo inicial es simplemente un valor predeterminado, utilizado cuando sus declaraciones SQL omiten el nombre de un catálogo.

Entonces, si el equipo de desarrollo alguna vez necesita acceder a las tablas del otro equipo, puede hacerlo si el administrador de la base de datos les ha otorgado privilegios para hacerlo. El acceso se realiza con nomenclatura explícita en el patrón: catalog.schema.table. Entonces, si el equipo de ‘almacén’ necesita ver el libro mayor del otro equipo (equipo de ‘ventas’), escriben declaraciones SQL con sales.accounting.ledger. Para acceder a su propio libro mayor, simplemente escriben accounting.ledger. Si acceden a ambos libros mayores en el mismo código fuente, pueden optar por evitar confusiones al incluir su propio nombre de catálogo (opcional). warehouse.accounting.ledger versus sales.accounting.ledger.


Por cierto…

Puedes escuchar la palabra esquema utilizado en un sentido más general, es decir, el diseño completo de la estructura de tabla de una base de datos en particular. Por el contrario, en el estándar SQL la palabra significa específicamente la capa particular en el Cluster > Catalog > Schema > Table jerarquía.

Postgres usa tanto la palabra base de datos al igual que catalogar en varios lugares, como el comando CREATE DATABASE.

No todos los sistemas de bases de datos proporcionan esta jerarquía completa de Cluster > Catalog > Schema > Table. Algunos tienen un solo catálogo (base de datos). Algunos no tienen esquema, solo un conjunto de tablas. Postgres es un producto excepcionalmente poderoso.

Desde el punto de vista relacional:

El catálogo es el lugar donde, entre otras cosas, se guardan todos los diversos esquemas (externos, conceptuales, internos) y todas las asignaciones correspondientes (externas / conceptuales, conceptuales / internas).

En otras palabras, el catálogo contiene información detallada (a veces llamada información del descriptor o metadatos) sobre los distintos objetos que son de interés para el propio sistema.

Por ejemplo, el optimizador utiliza información de catálogo sobre índices y otras estructuras de almacenamiento físico, así como mucha otra información, para ayudarlo a decidir cómo implementar las solicitudes de los usuarios. Asimismo, el subsistema de seguridad utiliza información de catálogo sobre usuarios y restricciones de seguridad para otorgar o denegar tales solicitudes en primer lugar.

Una introducción a los sistemas de bases de datos, 7ª ed., CJ Date, p 69-70.


Desde el punto de vista del estándar SQL:

Los catálogos son colecciones de esquemas con nombre en un entorno SQL. Un entorno SQL contiene cero o más catálogos. Un catálogo contiene uno o más esquemas, pero siempre contiene un esquema denominado INFORMATION_SCHEMA que contiene las vistas y los dominios del esquema de información.

Lenguaje de base de datos SQL, (Texto revisado propuesto de DIS 9075), p 45


Desde el punto de vista de SQL:

Un catálogo es a menudo sinónimo de base de datos. En la mayoría de las bases de datos SQL, si consulta las vistas de esquema de información, encontrará que los valores en la columna “catálogo_tabla” se asignan al nombre de una base de datos.

Si encuentra su plataforma usando catalogar de una manera más amplia que cualquiera de estas tres definiciones, podría referirse a algo más amplio que una base de datos: un grupo de bases de datos, un servidor o un grupo de servidores. Pero lo dudo, ya que lo habrías encontrado fácilmente en la documentación de tu plataforma.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *