sql >> データベース >  >> RDS >> Mysql

カタログ、スキーマ、ユーザー、およびデータベースインスタンス間の関係

    Oracleの場合:

    • サーバーインスタンス==データベース==カタログ==同じ実行エンジンによって管理されるすべてのデータ
    • schema ==データベース内の名前空間、ユーザーアカウントと同じ
    • ユーザー==スキーマ所有者==名前付きアカウント、スキーマと同一、データベースに接続でき、スキーマを所有し、おそらく他のスキーマでオブジェクトを使用する
    • 実行中のサーバー内のオブジェクトを識別するには、(スキーマ名+オブジェクト名)が必要です

    PostgreSQLの場合:

    • サーバーインスタンス==dbcluster==同じ実行エンジンによって管理されるすべてのデータ
    • データベース==カタログ==同じdbクラスター内の他のデータベースから分離されたdbクラスター内の単一のデータベース
    • schema==データベース内の名前空間
    • user ==名前付きアカウント。データベースに接続し、許可された各データベースのオブジェクトを個別に所有および使用できます
    • 実行中のサーバー内のオブジェクトを識別するには、(データベース名+スキーマ名+オブジェクト名)が必要です

    MySQLの場合:

    • サーバーインスタンス==カタログでは識別されず、データベースのセットのみ
    • データベース==スキーマ==カタログ==サーバー内の名前空間。
    • user ==名前付きアカウント。サーバーに接続して使用できます(ただし、所有することはできません -1つ以上のデータベース内の所有権の概念なし)オブジェクト
    • 実行中のサーバー内のオブジェクトを識別するには、(データベース名+オブジェクト名)が必要です

    Microsoft SQL Serverの場合:

    • サーバーインスタンス==管理対象データベースのセット
    • database==サーバー内の名前空間修飾子。カタログと呼ばれることはめったにありません
    • schema ==owner ==データベース内の名前空間、データベースの役割に関連付けられています。デフォルトではdboのみです。 使用されます
    • user ==名前付きアカウント。サーバーに接続して使用できます(ただし、所有することはできません -スキーマは所有者として機能します)1つ以上のデータベースのオブジェクト
    • 実行中のサーバー内のオブジェクトを識別するには、(データベース名+所有者+オブジェクト名)が必要です

    ですから、あなたの質問に対する答えは次のとおりだと思います:

    1. オブジェクトを識別するためにカタログ名が必要かどうかは、実装によって異なります。 「カタログ」、「スキーマ」、「データベース」の意味は、実装ごとに異なります。

    2. はい、カタログはデータストレージを抽象化したものです。自己完結型の分離された名前空間としても定義する必要があると思いますが、すべてのSQLエンジンがそれを行うわけではありません。

    3. データベース およびスキーマ すべてのベンダーによってかなり明確に定義されています。 カタログ は「データベース」と同義である場合もあり(少なくともOracleとPostgresでは)、「スキーマ」と同義である場合もあり、両方と同義である場合もあります。用語カタログ 多くの場合、メタデータコレクション(別名システムテーブル)を意味します。



    1. Postgresql:MacOSXを使用してpg_hba.confファイルを見つける方法

    2. SQLiteDatabase.query()でString[]selectionArgsを使用する

    3. メッセージングシステムのデータベースモデル

    4. 見落とされたT-SQLジェム