これはおそらく n00blike (またはさらに悪い) の質問です。しかし、私は常にスキーマをデータベース内のテーブル定義と見なしてきました。これは間違っているか、完全に正しくありません。データベース コースの内容はあまり覚えていません。
16 に答える
スキーマ-> フロア プラン
データベース-> 家
テーブル→部屋
リレーション スキーマは、テーブルの論理的な定義です。テーブルの名前と、各列の名前と型を定義します。それは計画や設計図のようなものです。データベース スキーマは、データベース全体の関係スキーマのコレクションです。
テーブルは一連の行 (別名「タプル」) を持つ構造であり、それぞれがスキーマによって定義された属性を持っています。テーブルには、特定の列の値を検索するのに役立つインデックスがある場合もあります。
データベースは、正式にはデータの集合です。このコンテキストでは、データベースはテーブルのコレクションになります。DBMS (データベース管理システム) は、データベースを管理および実行するソフトウェア (MySQL、SQL Server、Oracle など) です。
簡単に言えば、スキーマはデータベース全体の定義であるため、テーブル、ビュー、ストアド プロシージャ、インデックス、主キーと外部キーなどが含まれます。
この特定の投稿は、Oracle のみに関連することが示されており、別の DB のコンテキストではスキーマの定義が変更されます。
おそらくグーグルアップするだけのことですが、FYI用語は定義が異なるようで、最も厄介なことです:)
Oracle では、データベースはデータベースです。頭の中では、これをデータ ファイルと REDO ログ、およびデータベース自体 (つまり、インスタンスではない) のディスク上に実際に物理的に存在するものと考えてください。
スキーマは事実上ユーザーです。より具体的には、ユーザーが所有するテーブル/プロシージャ/インデックスなどのセットです。別のユーザーは別のスキーマ (彼/彼女が所有するテーブル) を持っていますが、ユーザーは選択権限を持つスキーマも表示できます。したがって、データベースは数百のスキーマで構成され、各スキーマは数百のテーブルで構成されます。同じデータベース内の異なるスキーマに同じ名前のテーブルを含めることができます。
テーブルはテーブルであり、データを含む行と列のセットであり、スキーマに含まれています。
たとえば、SQL Server では定義が異なる場合があります。私はこれを知りません。
スキーマの動作は、OOP の世界で見られる親オブジェクトのように見えます。したがって、それ自体はデータベースではありません。多分このリンクは役に立ちます。
しかし、MySQL では、この 2 つは同等です。キーワード DATABASE または DATABASES は、どこにでも SCHEMA または SCHEMAS に置き換えることができます。例:
- データベースの作成 <=> スキーマの作成
- データベースを表示 <=> スキーマを表示
スキーマとデータベースの用語は、DBMS に依存するものです。
テーブルは、垂直列 (名前で識別される) と水平行のモデルを使用して編成されるデータ要素 (値) のセットです。データベースには、(通常は) 1 つ以上のTablesが含まれます。そして、これらのテーブルにデータを保存します。テーブルは互いに関連している可能性があります (ここを参照)。
MusiGenesis がうまく表現しているように、ほとんどのデータベースでは次のようになっています。
スキーマ : データベース : テーブル :: 間取り図 : 家 : 部屋
しかし、Oracle では次のように考える方が簡単かもしれません。
スキーマ : データベース : テーブル :: 所有者 : 家 : 部屋
スキーマの詳細:
SQL 2005 では、スキーマはオブジェクトをグループ化する方法です。物を入れる容器です。ユーザーはこのオブジェクトを所有できます。スキーマに対する権限を付与できます。
2000 年には、スキーマはユーザーに相当していました。今では壊れて自由になり、非常に便利です。すべてのユーザー プロシージャを特定のスキーマに配置し、管理者プロシージャを別のスキーマに配置することができます。適切なユーザー/ロールにEXECUTEを付与すると、特定のプロシージャにEXECUTEを付与できます。良い。
ドット表記は次のようになります。
サーバー.データベース.スキーマ.オブジェクト
また
myserver01.Adventureworks.Accounting.Beans
ASchema
は、論理構造も含むデータベース オブジェクトのコレクションです。それを所有するユーザーの名前があります。database
はスキーマをいくつでも持つことができます。データベースの 1 つのテーブルが、同じ名前の 2 つの異なるスキーマに表示される場合があります。ユーザーは、選択権限が割り当てられているスキーマを表示できます。
Oracle スキーマでは、1 つのデータベースの 1 人のユーザーです。たとえば、scott は、データベース orcl の 1 つのスキーマです。1 つのデータベースに、scott のようなスキーマが多数ある場合があります。
スキーマは、データベース全体の計画ではありません。これは、データベース内のオブジェクト (テーブルなど) のサブセットのプラン/コンテナーです。
これは、必ずしも同じ機能カテゴリに分類されない複数のオブジェクト (テーブルなど) を 1 つのデータベース内に持つことができるということです。したがって、それらをさまざまなスキーマの下にグループ化し、異なるユーザー アクセス許可を与えることができます。
とはいえ、複数のスキーマで 1 つのテーブルを使用できるかどうかはわかりません。Management Studio UI には、テーブルにスキーマを割り当てるためのドロップダウンが用意されているため、スキーマを 1 つだけ選択できます。TSQLでそれを行うと、異なるオブジェクトIDを持つ2つ(または複数)の異なるオブジェクトが作成される可能性があると思います。
スキーマにはデータベースが含まれます。
データベースはスキーマの一部です。
つまり、スキーマ > データベースです。
スキーマには、ビュー、ストアド プロシージャ、データベース、トリガーなどが含まれます。
私は、次のアナロジーの理解に基づいて答えようとします。
- データベースは家のようなもの
- 家にはいくつかのタイプの部屋があります。あなたが本当に大きな家に住んでいると仮定します。リビングルーム、ベッドルーム、バスルーム、メザニン、ツリーハウスなどを同じように見せたくありません。それらはそれぞれ、それらを構築/使用する方法を示す青写真が必要です。言い換えれば、たとえば、バスルームを構築/使用する方法を伝えるスキーマがそれぞれ必要です。
- もちろん、いくつかのベッドルームがあるかもしれませんが、それぞれがわずかに異なって見えます。あなたとあなたの妻/夫の寝室は、子供の寝室とは少し異なります。各ベッドルームは、データベース内のテーブルに似ています。
- DBMSは家の執事のようなものです。彼は文字通りすべてを管理します。