異なるベンダー(Oracle、SQL Server、DB2、MySQL、およびPostgreSQL)のデータベースを比較するには、どのようにオブジェクトを一意に識別でき、カタログが必要ですか?たとえば、JavaのDatabaseMetadataでは、少なくともカタログとスキーマfooPatternを指定する必要があります。
カタログがデータストレージの単なる抽象化であることは本当ですか?
Oracleの場合:
PostgreSQLの場合
MySQLの場合
Microsoft SQL Serverの場合:
dbo
のみが使用されますだから私はあなたの質問への答えは次のとおりだと思う:
オブジェクトを識別するためにカタログ名が必要かどうかは、実装に依存します。 「カタログ」、「スキーマ」、および「データベース」の意味は、実装ごとに異なります。
はい、カタログはデータストレージの抽象化です。自己完結型の独立した名前空間としても定義する必要があると思いますが、すべてのSQLエンジンがそれを行うわけではありません。
Databaseおよびschemaは、すべてのベンダーによって十分に定義されています。 Catalogは、「データベース」(少なくともOracleとPostgresでは)と同義であり、「スキーマ」と同義であり、両方とも同義です。用語catalogは、多くの場合、メタデータコレクション(別名、システムテーブル)も意味します。
DB2の場合、スキーマは名前空間として使用されます。したがって、データベース内のオブジェクトを一意に識別したい場合、* schema.object_name *と言います。これは、マルチテナンシーを実現するための非常に便利な方法です。データベース内のテナントごとに個別のスキーマを作成できます。これにより、セキュリティと管理の両方の側面から懸念事項を適切に分離できます。 1つのDB2データベースに32Kスキーマを含めることができます。
DB2のカタログは、データベースに関するメタデータを含むシステムテーブルのコレクションです。一般に、カタログオブジェクトに直接アクセスすることは悪い習慣と見なされます。 API(JDBCなど)が提供する機能を使用して、カタログとそれに含まれるメタデータを探索することをお勧めします。
DB2には、他の抽象化レイヤーもあります。同じマシンでDB2の複数のインスタンスを実行できます。各インスタンスは、256個の個別のデータベース(それぞれ32Kスキーマ)を管理できます。サーバー上のDB2インスタンスの数は、使用可能なメモリーの量によってのみ制限されます。ある時点で、Amazon EC2 m1.largeで実行されているDB2の120のインスタンス(それぞれ1つのデータベースと10の接続)がありました。単一のサーバーに複数のDB2をインストールすることもできます。移行する予定の新しいバージョンをテストするときに役立ちます。正しいインストールに切り替えるのを忘れることがよくありますが、混乱を招きます。
Filipremによる投稿でmysqlについてここで言及されていることは間違っているようです。次のリンクによると、mysqlではjdbcカタログはデータベースに対応しています。 jdbcスキーマはサポートされていません。