回答:
関係の観点から:
カタログは、さまざまなスキーマ(外部、概念、内部)のすべてと、対応するすべてのマッピング(外部/概念、概念/内部)が保持されている場所です。
言い換えると、カタログには、システム自体に関係するさまざまなオブジェクトに関する詳細情報(記述子情報またはメタデータと呼ばれることもあります)が含まれています。
たとえば、オプティマイザは、インデックスやその他の物理ストレージ構造に関するカタログ情報、およびその他の多くの情報を使用して、ユーザー要求の実装方法を決定するのに役立ちます。同様に、セキュリティサブシステムは、ユーザーとセキュリティの制約に関するカタログ情報を使用して、そもそもそのような要求を許可または拒否します。
データベースシステム入門、第7版、CJ日付、p 69-70。
カタログは、SQL環境のスキーマの名前付きコレクションです。SQL環境に0個以上のカタログが含まれています。カタログには1つ以上のスキーマが含まれますが、常に、情報スキーマのビューとドメインを含むINFORMATION_SCHEMAという名前のスキーマが含まれます。
データベース言語SQL、(DIS 9075の提案された改訂テキスト)、p 45
多くの場合、カタログはデータベースと同義です。ほとんどのSQL dbmsでは、information_schemaビューをクエリすると、 "table_catalog"列の値がデータベースの名前にマッピングされていることがわかります。
これらの3つの定義のいずれよりも広い範囲でカタログを使用しているプラットフォームを見つけた場合、それはデータベースよりも広い範囲(データベースクラスター、サーバー、またはサーバークラスター)を参照している可能性があります。しかし、プラットフォームのドキュメントで簡単にそれを見つけたので、私はそれを少し疑っています。
マイク・シェリル「キャット・リコール」は素晴らしい答えを出しました。ここでは、Postgresという1つの例を追加します。
マシンにPostgresをインストールする場合、そのインストールはクラスターと呼ばれます。ここでの「クラスター」は、複数のコンピューターが連携して動作するというハードウェア的な意味ではありません。Postgresでは、クラスタとは、同じPostgresサーバーエンジンを使用して、複数の無関係なデータベースをすべて起動して実行できるという事実を指します。
クラスタという言葉も、Postgresと同じようにSQL 標準で定義されています。SQL標準に厳密に従うことは、Postgresプロジェクトの主要な目標です。
SQL-92仕様は言います:
クラスターは、実装で定義されたカタログのコレクションです。
そして
正確に1つのクラスターがSQLセッションに関連付けられています
これは、クラスターがデータベースサーバーである(各カタログがデータベースである)と言うのは、あいまいな言い方です。
したがって、PostgresとSQL標準の両方に、次の包含階層があります。
この図は、単一のクラスターを表しています。Postgresの場合、ホストコンピュータ(または仮想OS)ごとに複数のクラスタを持つことができます。(:EX複数のクラスタは、通常のPostgresの新しいバージョンをテストおよび展開するため、行われる9.0、9.1、9.2、9.3、9.4、9.5)。
複数のクラスターがある場合は、上の図が複製されていると想像してください。
異なるポート番号により、複数のクラスターが同時に稼働し、同時に稼働します。各クラスターには、独自のポート番号が割り当てられます。通常5432
はデフォルトであり、ユーザーが設定できます。各クラスターは、受信データベース接続用に割り当てられた独自のポートでリッスンしています。
たとえば、1つの企業に2つの異なるソフトウェア開発チームを置くことができます。1人は倉庫を管理するソフトウェアを作成し、もう1人のチームは販売とマーケティングを管理するソフトウェアを作成します。各開発チームには、幸いにも他のデータベースを認識しない独自のデータベースがあります。
しかし、IT運用チームは、両方のデータベースを単一のコンピューターボックス(Linux、Macなど)で実行することを決定しました。そのボックスにPostgresをインストールしました。つまり、1つのデータベースサーバー(データベースクラスター)です。そのクラスターでは、開発チームごとに1つずつ、2つのカタログを作成します。1つは「warehouse」、もう1つは「sales」という名前です。
各開発チームは、目的とアクセスロールが異なる多数のテーブルを使用しています。したがって、各開発チームはテーブルをスキーマに編成します。偶然にも、両方の開発チームが会計データの追跡を行っているため、各チームは偶然にも「会計」という名前のスキーマを持っています。同じスキーマ名を使用しても問題はありません。カタログごとに独自の名前空間があるため、衝突は発生しません。
さらに、各チームは最終的に「元帳」という名前の会計目的のテーブルを作成します。ここでも、名前の衝突はありません。
この例は階層と考えることができます…
Postgres 9.2
クラスター(インストール)
warehouse
カタログ(データベース)
inventory
スキーマ
accounting
スキーマ
ledger
テーブルsales
カタログ(データベース)
selling
スキーマ
accounting
スキーマ(上記と同じ名前)
ledger
テーブル(上記と同じ名前)Postgres 9.3
集まる
各開発チームのソフトウェアがクラスターに接続します。その際、どのカタログ(データベース)であるかを指定する必要があります。Postgresでは1つのカタログに接続する必要がありますが、そのカタログに限定されません。この初期カタログは単なるデフォルトであり、SQLステートメントでカタログの名前が省略されている場合に使用されます。
そのため、開発チームが他のチームのテーブルにアクセスする必要がある場合でも、データベース管理者がアクセスするための特権を付与していれば、アクセスできる可能性があります。アクセスは、パターンの明示的な命名で行われます:catalog.schema.table。したがって、「倉庫」チームが他のチーム(「営業」チーム)の元帳を確認する必要がある場合、SQLステートメントをで記述しsales.accounting.ledger
ます。自分の元帳にアクセスするには、単にと書きaccounting.ledger
ます。彼らは、ソースコードの同じ部分に両方の元帳にアクセスした場合、彼らは、自分の(オプション)カタログ名を含めることで、混乱を避けるために選択することもwarehouse.accounting.ledger
対sales.accounting.ledger
。
ところで…
より一般的な意味で使用されているスキーマという言葉、つまり、特定のデータベースのテーブル構造の設計全体を耳にするかもしれません。対照的に、SQL標準では、この単語は特に階層内の特定の層を意味しCluster > Catalog > Schema > Table
ます。
Postgresは、CREATE DATABASEコマンドなどのさまざまな場所で、データベースとカタログの両方を使用します。
すべてのデータベースシステムがのこの完全な階層を提供するわけではありませんCluster > Catalog > Schema > Table
。一部には単一のカタログ(データベース)しかありません。一部にはスキーマがなく、1セットのテーブルのみがあります。Postgresは非常に強力な製品です。
PostgreSQL (pg_catalog)
、システムカタログなど、データベースのメタデータ定義を格納「PG_」テーブル、数十人をpg_index
、 pg_trigger
とpg_constraint
。(2)ANSI (information_schema)
、SQL標準でと定義されている同じシステムカタログの読み取り専用ビュー information_schema
。pgAdminの「カタログ」ノードのより適切な名前は、「システム」または「システムテーブル」です。
...Catalog > Schema...
、なぜpgAdmin(PostgreSQL UI)の「Catalog」ノードと「Schema」ノードが、カタログの子ノードとしてのスキーマノードではなく、兄弟ノードであるのかを誰かに教えてもらえますか?