Question Relation entre catalogue, schéma, utilisateur et instance de base de données


Pour comparer des bases de données de différents fournisseurs (Oracle, SQL Server, DB2, MySQL et PostgreSQL), comment puis-je identifier des objets de manière unique et ai-je besoin d'un catalogue? Par exemple, dans Java DatabaseMetadata, je devrais spécifier catalog et schéma fooPattern au moins.

Est-il vrai que le catalogue n'est qu'une abstraction du stockage de données?


45
2017-10-30 00:11


origine


Réponses:


Dans Oracle:

  • instance du serveur == base de données == catalogue == toutes les données gérées par le même moteur d'exécution
  • schéma == espace de noms dans la base de données, identique au compte d'utilisateur
  • utilisateur == propriétaire du schéma == compte nommé, identique au schéma, qui peut se connecter à la base de données, qui possède le schéma et utilise des objets éventuellement dans d'autres schémas
  • pour identifier un objet sur le serveur en cours d'exécution, vous avez besoin de (nom du schéma + nom de l'objet)

Dans PostgreSQL:

  • instance du serveur == cluster db == toutes les données gérées par le même moteur d'exécution
  • base de données == catalogue == base de données unique dans le cluster db, isolée des autres bases de données dans le même cluster db
  • schéma == espace de noms dans la base de données
  • user == Compte nommé, qui peut se connecter à la base de données, posséder et utiliser des objets dans chaque base de données autorisée séparément
  • pour identifier un objet sur le serveur en cours d'exécution, vous avez besoin de (nom de la base de données + nom du schéma + nom de l'objet)

Dans MySQL:

  • instance de serveur == non identifiée avec le catalogue, juste un ensemble de bases de données
  • base de données == schéma == catalogue == un espace de noms dans le serveur.
  • utilisateur == compte nommé, qui peut se connecter au serveur et utiliser (mais ne peut pas posséder - pas de concept de propriété) objets dans une ou plusieurs bases de données
  • pour identifier un objet sur le serveur en cours d'exécution, vous avez besoin de (nom de la base de données + nom de l'objet)

Dans Microsoft SQL Server:

  • instance de serveur == ensemble de bases de données gérées
  • base de données == qualificatif d'espace de noms dans le serveur, rarement appelé catalogue
  • schéma == propriétaire == espace de noms dans la base de données, lié aux rôles de base de données, par défaut uniquement dbo est utilisé
  • utilisateur == compte nommé, qui peut se connecter au serveur et utiliser (mais ne peut pas posséder - le schéma fonctionne en tant que propriétaire) objets dans une ou plusieurs bases de données
  • pour identifier un objet sur le serveur en cours d'exécution, vous avez besoin de (nom de la base de données + propriétaire + nom de l'objet)

Donc, je pense que la réponse à vos questions est la suivante:

  1. Cela dépend de l'implémentation, si le nom du catalogue est nécessaire pour identifier les objets. La signification de "catalogue", "schéma" et "base de données" varie d'une implémentation à l'autre.

  2. Oui, un catalogue est une abstraction du stockage de données. Je pense qu'il devrait également être défini comme un espace de noms isolé et autonome, mais tous les moteurs SQL ne le font pas.

  3. Base de données et schéma sont assez bien définis par tous les fournisseurs. Catalogue est parfois synonyme de "base de données" (au moins dans Oracle et Postgres), parfois synonyme de "schéma", et parfois synonyme des deux. Le terme catalogue signifie aussi souvent la collecte de métadonnées (aussi appelées tables système).


87
2017-10-30 10:48



Pour DB2, le schéma est utilisé comme espaces de noms. Donc, si vous voulez identifier de manière unique un objet dans une base de données, vous diriez * schema.object_name *. C'est un moyen très pratique pour atteindre le multitenancy. Vous pouvez avoir un schéma distinct pour chaque locataire de votre base de données. Cela permet une bonne séparation des préoccupations tant du point de vue de la sécurité que de la gestion. Vous pouvez avoir des schémas 32K dans une seule base de données DB2.

Un catalogue dans DB2 est simplement une collection de tables système contenant des métadonnées sur la base de données. En général, l'accès direct aux objets de catalogue est considéré comme une mauvaise pratique. Il est préférable d'utiliser les fonctionnalités fournies par votre API (par exemple, JDBC) pour explorer le catalogue et les métadonnées qu'il contient.

DB2 a également d'autres couches d'abstraction. Vous pouvez avoir plusieurs instances de DB2 s'exécutant sur le même ordinateur. Chaque instance peut gérer 256 bases de données distinctes (chacune avec des schémas de 32 Ko). Le nombre d'instances DB2 sur un serveur n'est limité que par la quantité de mémoire disponible. À un moment donné, 120 instances de DB2 (chacune contenant une base de données et 10 connexions) fonctionnaient sur Amazon EC2 m1.large. Vous pouvez également avoir plusieurs installations de DB2 sur un seul serveur. c'est utile pour tester une nouvelle version vers laquelle vous envisagez de migrer. Je trouve cela déroutant mais oublie souvent de passer à la bonne installation.


5
2017-11-02 01:56



Ce qui est mentionné ici à propos de mysql dans post par filiprem semble être incorrect. Selon les liens suivants, dans mysql, le catalogue jdbc correspond à la base de données. Le schéma jdbc n'est pas pris en charge.


3
2017-07-03 20:30