SQL規格のカタログについて

SQLの規格では、データ管理の単位を表す抽象概念として次のものが定義されています。これらは、上の概念がひとつ下の概念を包摂するという関係にあります。(SQL:1999リレーショナル言語詳解より)

  • データベース
  • カタログ
  • スキーマ
  • テーブル及びビュー
  • 行及び列

で、カタログに相当するものですが、代表的なRDBMSにはあるんでしょうか?

少なくとも、Microsoft SQL Server 2005にはあります。まぁ、あるというより、対応付けが明確に示されているというほうが正確かもしれません。SQL Serverとしては「SQL Serverのデータベース」が「SQL規格のカタログ」になります。ドキュメントにありました。

http://msdn2.microsoft.com/ja-jp/library/ms186778.aspx

でも、MSDNの他のページでは、スキーマメタデータのことをシステムカタログと呼ぶなど「カタログ」という用語を別の意味で使っているので要注意。「SQL規格のカタログ」に相当する「SQL Serverのデータベース」については普通に「データベース」と呼んでいます。ややこしい。


SQL規格では「カタログ名.スキーマ名.テーブル名」みたいにドット(.)でつないでアクセスできるとしていますが、SQL Serverではまさにこれに対応しています。そして、異なるカタログに属するテーブル間の結合もできるようになっています。

select * from hoge.foo.emp e inner join bar.baz.address a on e.addressid = a.addressid

他のRDBMSはどうなんでしょうか。少なくともOralceではカタログに相当するものはないらしい。PostgreSQLMySQLDB2はわからない。時間があるときに試してみようと思います。

カタログに相当するものがあるかどうかの判断基準は、「XXX.スキーマ名.テーブル名」でアクセスできるかどうかでいこうと思います。XXXになんらかの名前を入れることができたらそれがカタログってことで。


追記
そういえば、SQL Serverのデフォルトのスキーマ名は「dbo」ですが、テーブルがこのスキーマに属している場合は省略して次のように書けます。

select * from hoge..emp e inner join bar..address a on e.addressid = a.addressid