web-dev-qa-db-fra.com

Quelle est la différence entre un catalogue et un schéma dans une base de données relationnelle?

J'avais l'habitude de penser que le schéma était l'objet "wrapper supérieur" avant la base de données elle-même. Je veux dire DB.schema.<what_ever_object_name_under_schema>.

Eh bien, le catalogue "wrapper" est maintenant assez déroutant. Pourquoi aurions-nous besoin d'un catalogue? Dans quel but, précisément, le catalogue devrait-il être utilisé?

83
Stephan

Du point de vue relationnel:

Le catalogue est l’endroit où sont conservés, entre autres, tous les schémas (externe, conceptuel, interne) et tous les mappages correspondants (externe/conceptuel, conceptuel/interne).

En d’autres termes, le catalogue contient des informations détaillées (parfois appelées des informations de descripteur ou des métadonnées ) concernant les différents objets présentant un intérêt pour le système lui-même.

Par exemple, l'optimiseur utilise les informations de catalogue relatives aux index et autres structures de stockage physiques, ainsi que de nombreuses autres informations, pour l'aider à décider de la manière dont les demandes de l'utilisateur seront implémentées. De même, le sous-système de sécurité utilise les informations de catalogue relatives aux utilisateurs et aux contraintes de sécurité pour accorder ou refuser de telles demandes en premier lieu.

Une introduction aux systèmes de base de données, 7e éd., C.J. Date, p. 69-70.


Les catalogues sont des collections nommées de schémas dans un environnement SQL. Un environnement SQL ne contient aucun catalogue ou plus. Un catalogue contient un ou plusieurs schémas, mais contient toujours un schéma nommé INFORMATION_SCHEMA qui contient les vues et les domaines du schéma d'information.

langage de base de données SQL , (texte révisé proposé pour le DIS 9075), p 45


Un catalogue est souvent synonyme de database. Dans la plupart des dbms SQL, si vous interrogez les vues information_schema, vous constaterez que les valeurs de la colonne "table_catalog" correspondent au nom d'une base de données.

Si vous trouvez que votre plate-forme utilise catalog d'une manière plus large que l'une de ces trois définitions, il peut s'agir d'une référence plus large qu'une base de données - un cluster de base de données, un serveur ou un cluster de serveurs. . Mais je doute un peu que, puisque vous auriez trouvé cela facilement dans la documentation de votre plate-forme.

Mike Sherrill 'Cat Recall' a donné ne excellente réponse . J'ajouterai simplement un exemple: Postgres .

Cluster = Une installation Postgres

Lorsque vous installez Postgres sur une machine, cette installation s'appelle un cluster. Le terme "cluster" ne signifie pas ici sens matériel de plusieurs ordinateurs travaillant ensemble. Dans Postgres, cluster indique que vous pouvez avoir plusieurs bases de données non liées fonctionnant à l'aide du même moteur de serveur Postgres.

Le mot cluster est également défini par le SQL Standard de la même manière que dans Postgres . Suivre de près le standard SQL est l’un des objectifs principaux du projet Postgres.

La spécification SQL-92 indique:

Un cluster est une collection de catalogues définie par l'implémentation.

et

Un seul cluster est associé à une session SQL

C'est une manière obtuse de dire qu'un cluster est un serveur de base de données (chaque catalogue est une base de données).

Cluster> Catalogue> Schema> Table> Columns & Rows

Donc, dans Postgres et SQL Standard, nous avons cette hiérarchie de confinement:

  • Un ordinateur peut avoir un cluster ou plusieurs.
  • Un serveur de base de données est un cluster.
  • Un cluster a catalogues . (Catalogue = base de données)
  • Les catalogues ont schémas. (Schéma = espace de noms des tables et limite de sécurité)
  • Les schémas ont tables .
  • Les tables ont rows .
  • Les lignes ont valeurs, définies par colonnes .
    Ces valeurs correspondent aux données professionnelles qui intéressent vos applications et vos utilisateurs, telles que le nom de la personne, la date d'échéance de la facture, le prix du produit, le meilleur score du joueur. La colonne définit le type de données des valeurs (texte, date, nombre, etc.).

Diagram showing nesting boxes representing how connecting on a port gets you to cluster (a database server) which contains one or more Catalogs (a database) each of which contains one or more Schemas (a namespace) each of which contains tables each of which has rows.

Plusieurs clusters

Ce diagramme représente un seul cluster. Dans le cas de Postgres, vous pouvez avoir plus d'un cluster par ordinateur hôte (ou système d'exploitation virtuel). Plusieurs clusters sont couramment utilisés pour tester et déployer de nouvelles versions de Postgres (ex: 9. , 9.1 , 9.2 , 9. , 9.4 , 9.5 ).

Si vous avez eu plusieurs clusters, imaginez que le diagramme ci-dessus soit dupliqué.

Des numéros de port différents permettent aux multiples clusters de vivre côte à côte en mode opérationnel. Chaque cluster se voit attribuer son propre numéro de port. L'habituel 5432 n'est que la valeur par défaut et peut être défini par vous. Chaque cluster écoute sur son propre port attribué les connexions entrantes à la base de données.

Exemple de scénario

Par exemple, une entreprise peut avoir deux équipes de développement de logiciels différentes. L'un écrit des logiciels pour gérer les entrepôts tandis que l'autre équipe construit un logiciel pour gérer les ventes et le marketing. Chaque équipe de développement a sa propre base de données, parfaitement ignorante de celle de l’autre.

Mais l'équipe des opérations informatiques a pris la décision de faire fonctionner les deux bases de données sur une seule machine (Linux, Mac, peu importe). Ils ont donc installé Postgres sur cette boîte. Donc, un serveur de base de données (cluster de base de données). Dans ce cluster, ils créent deux catalogues, un catalogue pour chaque équipe de développement: l'un nommé "entrepôt" et l'autre nommé "vente".

Chaque équipe de développement utilise plusieurs dizaines de tables ayant des objectifs et des rôles d'accès différents. Ainsi, chaque équipe de développement organise leurs tables en schémas. Par coïncidence, les deux équipes de développement effectuent un certain suivi des données comptables. Chaque équipe possède donc un schéma nommé "comptabilité". L'utilisation du même nom de schéma n'est pas un problème car les catalogues ont chacun leur propre namespace donc pas de collision.

De plus, chaque équipe crée finalement une table à des fins de comptabilité appelée "grand livre". Encore une fois, pas de collision de nommage.

Vous pouvez considérer cet exemple comme une hiérarchie…

  • Ordinateur (boîtier matériel ou serveur virtualisé)
    • Postgres 9.2 cluster (installation)
      • warehouse catalogue (base de données)
        • inventory schéma
          • [… des tables]
        • accounting schéma
          • ledger table
          • [… D'autres tableaux]
      • sales catalogue (base de données)
        • selling schéma
          • [… des tables]
        • accounting schéma (même nom que ci-dessus)
          • ledger table (même nom comme ci-dessus)
          • [… D'autres tableaux]
    • Postgres 9.3 grappe
      • [… Autres schémas et tableaux]

Le logiciel de chaque équipe de développement établit une connexion avec le cluster. Ce faisant, ils doivent spécifier quel catalogue (base de données) leur appartient. Postgres nécessite que vous vous connectiez à un catalogue, mais vous n'êtes pas limité à ce catalogue. Ce catalogue initial est simplement un paramètre par défaut, utilisé lorsque vos instructions SQL omettent le nom d'un catalogue.

Ainsi, si l'équipe de développement a besoin d'accéder aux tables de l'autre équipe, elle peut le faire si l'administrateur de la base de données lui a donné privilèges pour le faire. L'accès se fait avec un nom explicite dans le modèle: catalog.schema.table . Par conséquent, si l’équipe "entrepôt" a besoin de consulter le grand livre de l’équipe ("équipe de vente"), elle écrit des instructions SQL avec sales.accounting.ledger. Pour accéder à leur propre registre, ils écrivent simplement accounting.ledger. S'ils accèdent aux deux ledgers du même morceau de code source, ils peuvent choisir d'éviter toute confusion en incluant leur propre nom de catalogue (facultatif), warehouse.accounting.ledger contre sales.accounting.ledger.


Au fait…

Vous entendez peut-être le mot schéma utilisé dans un sens plus général, c'est-à-dire la conception complète de la structure de table d'une base de données particulière. En revanche, dans le standard SQL, le mot "Word" désigne spécifiquement la couche particulière dans le Cluster > Catalog > Schema > Table hiérarchie.

Postgres utilise à la fois le mot base de données ainsi que catalogue à divers endroits, tels que la commande CREATE DATABASE .

Tous les systèmes de base de données ne fournissent pas cette hiérarchie complète de Cluster > Catalog > Schema > Table. Certains n'ont qu'un seul catalogue (base de données). Certains n'ont pas de schéma, juste un ensemble de tables. Postgres est un produit exceptionnellement puissant.

146
Basil Bourque