スキーマとテーブルとデータベースの違いは何ですか?


155

これはおそらくn00bに似た(またはさらに悪い)質問です。しかし、私は常にスキーマをデータベースのテーブル定義として見てきました。これは間違っているか、完全に正しいわけではありません。データベースコースのことはあまり覚えていません。


3
Oracleでは、スキーマは単にユーザーを指します。ユーザーを作成すると、スキーマが作成され、テーブル、ビュー、インデックスパッケージなどを追加できます
Ali786

回答:


242

スキーマデータベーステーブル::フロアプラン部屋


81
少し不可解ですが、間違いはありません。しかし、自称n00bがそれを理解できると本当に思いますか?
Stein G. Strindhaug、2008年

6
良いアナロジー。スキーマにはテーブルだけではなく、ブループリントには配線と暖房と配管が含まれているため、「フロアプラン」を「ブループリント」に変更します。
Paul Tomblin、

4
「スキーマ」は本当に「計画」を意味します。データベース全体、または1つのテーブルまたはビューを参照するために使用されているのを見てきました。
MusiGenesis 2008年

@Paul:良い点。私はもともと「青写真」を書いたが、それが本当に「家」を暗示していないので、(少なくとも私には)それを変更した。
MusiGenesis 2008年

4
ええ、私はスキーマをOracleのユーザーとして見る傾向があります。そのため、定義はdbごとに異なります。
ロバート

123

関係スキーマは、テーブルの論理的な定義である-それは、テーブルの名前が何であるかを定義し、どのような各列の名前とタイプがあります。それは計画や青写真のようなものです。あデータベーススキーマは、データベース全体のためのリレーションスキーマのコレクションです。

表は、スキーマによって定義された属性を持つそれぞれが、行(別名「タプル」)の束を有する構造です。テーブルには、特定の列の値を検索するのに役立つインデックスが付いている場合もあります。

データベースは、正式に、データの任意の集合です。このコンテキストでは、データベースはテーブルのコレクションになります。DBMS(データベース管理システム)が管理し、データベースを実行します(などのMySQL、SQL ServerやOracleなど)のソフトウェアです。


1
データベーススキーマはまた、索引、ビュー、等を含む
ポールTomblin

1
確かにこれは正しくありません。データベースはテーブルのコレクションそのものではありません。たとえば、1つのテーブルがなくても、30のデータベースを持つことができます。
ロバート

@ロバート-テーブルがないデータベースを持つことのポイントは何ですか?
ポールトンブリン

16
テーブルがなくても、それはテーブルのコレクションです。これはテーブルの空のコレクションです。
Jon Skeet、

1
@Ian:データベースにも制約(参照制約(主キー、外部キー)、一意性制約、チェック制約)があることを忘れないでください。トリガーとプロシージャも含まれる場合があります。
ジョナサンレフラー、

16

簡単に言うと、スキーマはデータベース全体の定義であるため、テーブル、ビュー、ストアドプロシージャ、インデックス、主キー、外部キーなどが含まれます。


12

この特定の投稿は、Oracleにのみ関連することが示され、スキーマの定義は別のDBのコンテキストにある場合に変更されます。

たぶんググるだけのちょっとしたことかもしれませんが、FYIの用語はその定義が異なるようです。これは最も厄介なことです:)

Oracleでは、データベースはデータベースです。頭の中でこれをデータファイルとREDOログ、そしてデータベース自体のディスク上の実際の物理的な存在(つまり、インスタンスではない)と考えてください。

スキーマは事実上ユーザーです。より具体的には、ユーザーが所有する一連のテーブル/プロシージャ/インデックスなどです。別のユーザーは別のスキーマ(自分が所有するテーブル)を持っていますが、ユーザーは選択した特権を持っているスキーマを表示することもできます。したがって、データベースは数百のスキーマで構成でき、各スキーマは数百のテーブルで構成できます。同じデータベース内の異なるスキーマに同じ名前のテーブルを作成できます。

テーブルはテーブルであり、データを含む行と列のセットであり、スキーマに含まれています。

たとえば、SQL Serverでは定義が異なる場合があります。私はこれを知りません。


11

スキーマは、OOPの世界では、親オブジェクトのように動作します。そのため、データベースそのものではありません。多分このリンクは役に立ちます。

しかし、MySQLでは、この2つは同等です。キーワードDATABASEまたはDATABASESは、出現するところはどこでもSCHEMAまたはSCHEMASに置き換えることができます。例:

  • データベースの作成<=>スキーマの作成
  • データベースを表示<=>スキーマを表示

MySQLのドキュメント

スキーマとデータベースの用語は、DBMSに依存しています。

A と水平方向の行(その名前によって識別される)垂直列のモデルを使用して編成されたデータ要素(値)の集合です。データベースには1つ以上の(通常は)テーブルが含まれます。そして、あなたはこれらのテーブルにデータを保存します。テーブルは相互に関連している可能性があります(ここを参照)。


貴重な回答
sofs1

2

スキーマの詳細:

SQL 2005では、スキーマはオブジェクトをグループ化する方法です。オブジェクトを入れることができるコンテナです。人々はこのオブジェクトを所有できます。スキーマに対する権限を付与できます。

2000年には、スキーマはユーザーと同等でした。今では無料で壊れており、非常に便利です。すべてのユーザープロシージャを特定のスキーマにスローし、管理プロシージャを別のスキーマにスローすることができます。EXECUTEを適切なユーザー/ロールに付与すると、特定の手順に対するEXECUTEの付与が完了します。いいね。

ドット表記は次のようになります。

Server.Database.Schema.Object

または

myserver01.Adventureworks.Accounting.Beans


2

A Schemaは、論理構造も含むデータベースオブジェクトのコレクションです。それはそれを所有するユーザーの名前を持っています。A databaseは任意の数のスキーマを持つことができます。データベースの1つのテーブルは、同じ名前の2つの異なるスキーマに表示できます。ユーザーは、選択権限が割り当てられているスキーマを表示できます。


2

MusiGenesisがほとんどのデータベースでとてもうまく表現したように:

スキーマ:データベース:テーブル::フロアプラン:家:部屋

しかし、Oracleでは次のことを考える方が簡単かもしれません。

スキーマ:データベース:テーブル::所有者:家:部屋


2

上記の回答のいくつかに反して、それぞれの経験に基づく私の理解は次のとおりです。

  • MySQL: database/schema :: table
  • SQLサーバー: database :: (schema/namespace ::) table
  • Oracle: database/schema/user :: (tablespace ::) table

Oracleでテーブルスペースがオプションであるかどうかを修正してください。私がそれらを使用したことを覚えているので、久しぶりです。


1

Oracleでは、スキーマは1つのデータベースの下の1人のユーザーです。たとえば、scottはデータベースorclの1つのスキーマです。1つのデータベースに、scottのような多くのスキーマがある場合があります。


1

データベースには、1つ以上の名前付きスキーマが含まれ、スキーマにはテーブルが含まれます。スキーマには、データ型、関数、演算子など、他の種類の名前付きオブジェクトも含まれています。同じオブジェクト名を異なるスキーマで競合なしに使用できます。たとえば、schema1とmyschemaの両方に、mytableという名前のテーブルを含めることができます。データベースとは異なり、スキーマは厳密に分離されていません。ユーザーは、アクセスする権限がある場合、接続しているデータベース内の任意のスキーマ内のオブジェクトにアクセスできます。

スキーマを使用する理由はいくつかあります。

多くのユーザーが互いに干渉することなく1つのデータベースを使用できるようにするため。

データベースオブジェクトを論理グループに編成して、管理しやすくします。

サードパーティのアプリケーションを別のスキーマに配置して、他のオブジェクトの名前と衝突しないようにすることができます。

スキーマは入れ子にすることができないことを除いて、オペレーティングシステムレベルのディレクトリに似ています。

公式ドキュメントはhttps://www.postgresql.org/docs/9.1/ddl-schemas.htmlを参照でき ます


0

スキーマにはデータベースが含まれます。

データベースはスキーマの一部です。

つまり、スキーマ>データベースです。

スキーマには、ビュー、ストアドプロシージャ、データベース、トリガーなどが含まれます。


0

スキーマはデータベース全体の計画ではありません。これは、データベース内のオブジェクトのサブセット(例:テーブル)のプラン/コンテナです。

つまり、1つのデータベース内に、必ずしも同じ機能カテゴリに分類されない複数のオブジェクト(テーブルなど)を含めることができます。したがって、さまざまなスキーマの下でそれらをグループ化し、さまざまなユーザーアクセス許可を与えることができます。

そうは言っても、1つのテーブルを複数のスキーマの下に置くことができるかどうかはわかりません。Management Studio UIは、スキーマをテーブルに割り当てるためのドロップダウンを提供します。したがって、1つのスキーマのみを選択することができます。TSQLでこれを行うと、異なるオブジェクトIDを持つ2つ(または複数)の異なるオブジェクトが作成される可能性があります。


0

データベーススキーマは、テーブル、ビュー、ストアドプロシージャなどのオブジェクトを論理的にグループ化する方法です。スキーマをオブジェクトのコンテナと考えてください。そしてテーブルは行と列のコレクションです。すべてのテーブルの組み合わせはdbになります。


1
これらの最初の文はまったく同じです...。stackoverflow.com/a/29042133/2308683
OneCricketeer
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.