Pour comparer les bases de données de différents fournisseurs (Oracle, SQL Server, DB2, MySQL et PostgreSQL), comment puis-je identifier n'importe quel objet de manière unique et ai-je besoin d'un catalogue? Par exemple, dans DatabaseMetadata de Java, je devrais spécifier fooPattern de catalogue et de schéma au moins.
Est-il vrai que le catalogue n'est qu'une abstraction du stockage de données?
Dans Oracle:
Dans PostgreSQL:
Dans MySQL:
Dans Microsoft SQL Server:
dbo
est utiliséJe pense donc que la réponse à vos questions est:
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.
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é autonome, mais tous les moteurs SQL ne le font pas.
La base de données et le 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 collection de métadonnées (aka tables système).
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 *. Il s'agit d'un moyen très pratique de réaliser la mutualisation. Vous pouvez avoir un schéma distinct pour chaque locataire dans votre base de données. Cela permet de bien séparer les préoccupations des aspects de sécurité et de gestion. Vous pouvez avoir 32K schémas dans une seule base de données DB2.
Un catalogue dans DB2 est simplement une collection de tables système qui contiennent des métadonnées sur la base de données. En général, il est considéré comme une mauvaise pratique d'accéder directement aux objets du catalogue. 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 possède également d'autres couches d'abstraction. Vous pouvez avoir plusieurs instances de DB2 en cours d'exécution sur la même machine. Chaque instance peut gérer 256 bases de données distinctes (chacune avec des schémas 32K). Le nombre d'instances DB2 sur un serveur n'est limité que par la quantité de mémoire dont vous disposez. À un moment donné, nous avions 120 instances de DB2 (chacune avec une base de données et 10 connexions) exécutées sur Amazon EC2 m1.large. Vous pouvez également avoir plusieurs installations de DB2 sur un même serveur. il est utile lors du test d'une nouvelle version vers laquelle vous prévoyez de migrer. Je trouve cela déroutant mais oubliant souvent de passer à la bonne installation.
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.