スキーマとテーブルとデータベースの違いは何ですか?
-
08-07-2019 - |
質問
これはおそらくn00blike(またはさらに悪い)質問です。しかし、私は常にデータベースのテーブル定義としてスキーマを見てきました。これは間違っているか、まったく正しくありません。データベースコースのことはあまり覚えていません。
解決
スキーマ:データベース:テーブル :: フロアプラン:家:部屋
他のヒント
A リレーションスキーマは、テーブルの論理的な定義です。テーブルの名前、各列の名前とタイプを定義します。それは計画や青写真のようなものです。 データベーススキーマは、データベース全体の関係スキーマのコレクションです。
A table は、一連の行(別名<!> quot; tuples <!> quot;)を持つ構造で、各行にはスキーマで定義された属性があります。テーブルには、特定の列の値を検索するのに役立つインデックスが含まれている場合があります。
データベースは、正式にはデータのコレクションです。このコンテキストでは、データベースはテーブルのコレクションになります。 DBMS (データベース管理システム)は、データベースを管理および実行するソフトウェア(MySQL、SQL Server、Oracleなど)です。
一言で言えば、スキーマはデータベース全体の定義であるため、テーブル、ビュー、ストアドプロシージャ、インデックス、プライマリキー、外部キーなどが含まれます。
この特定の投稿は、Oracleのみに関連することが示されており、スキーマの定義は別のDBのコンテキストで変更されます。
おそらくグーグルアップするのはちょっとしたことですが、FYIの用語は定義が異なるようです。これは最も厄介なことです:)
Oracleでは、データベースはデータベースです。あなたの頭の中では、これをデータファイルとREDOログ、そしてデータベース自体のディスク上の実際の物理的存在(つまりインスタンスではない)と考えてください
スキーマは事実上ユーザーです。より具体的には、ユーザーが所有する一連のテーブル/プロシージャ/インデックスなどです。別のユーザーは別のスキーマ(自分が所有するテーブル)を持っていますが、ユーザーは選択した特権を持つ任意のスキーマも見ることができます。したがって、データベースは数百のスキーマで構成され、各スキーマは数百のテーブルで構成されます。同じデータベースにある異なるスキーマに同じ名前のテーブルを置くことができます。
テーブルは、データを含む行と列のセットであり、スキーマに含まれるテーブルです。
たとえば、SQL Serverでは定義が異なる場合があります。私はこれを知りません。
スキーマは、OOPの世界で見られるように、親オブジェクトのように動作します。そのため、データベース自体ではありません。 このリンクが役立つかもしれません。
しかし、MySQLでは、この2つは同等です。キーワードDATABASEまたはDATABASES 表示される場所はどこでもSCHEMAまたはSCHEMASに置き換えることができます。例:
- データベースの作成<!> lt; = <!> gt;スキーマの作成
- データベースの表示<!> lt; = <!> gt;スキーマを表示
SCHEMA <!> amp;データベース用語はDBMSに依存するものです。
テーブルは、垂直列(名前で識別される)と水平行のモデルを使用して編成されたデータ要素(値)のセットです。データベースには、1つ以上の(通常)テーブルが含まれます。そして、これらのテーブルにデータを保存します。テーブルは互いに関連している場合があります(こちら)。
スキーマの詳細:
SQL 2005では、スキーマはオブジェクトをグループ化する方法です。オブジェクトを入れることができるコンテナです。人々はこのオブジェクトを所有できます。スキーマに対する権限を付与できます。
2000年のスキーマはユーザーと同等でした。今では無料で壊れており、非常に便利です。特定のスキーマですべてのユーザープロシージャをスローし、別のスキーマで管理プロシージャをスローできます。適切なユーザー/ロールにEXECUTEを付与すると、特定の手順でEXECUTEを付与できます。いいね
ドット表記は次のようになります。
Server.Database.Schema.Object
または
myserver01.Adventureworks.Accounting.Beans
A Schema
は、論理構造も含むデータベースオブジェクトのコレクションです。
それを所有するユーザーの名前があります。
database
には任意の数のスキーマを含めることができます。
データベースからの1つのテーブルは、同じ名前の2つの異なるスキーマに表示できます。
ユーザーは、選択権限が割り当てられているスキーマを表示できます。
Oracleスキーマでは、1つのデータベースの下に1人のユーザーがいます。たとえば、scottはデータベースorclの1つのスキーマです。 1つのデータベースには、scottのような多くのスキーマがあります
MusiGenesisは、ほとんどのデータベースで次のようにうまく配置しています:
スキーマ:データベース:テーブル::間取り図:家:部屋
しかし、Oracleでは次のように考える方が簡単かもしれません:
スキーマ:データベース:テーブル::所有者:家:部屋
上記の回答のいくつかに反して、それぞれの経験に基づいた私の理解を以下に示します。
- MySQL:
database/schema :: table
- SQL Server:
database :: (schema/namespace ::) table
- Oracle:
database/schema/user :: (tablespace ::) table
Oracleでテーブルスペースがオプションであるかどうかを修正してください。それらを使用したことを覚えてから長い時間が経ちました。
スキーマにはデータベースが含まれます。
データベースはスキーマの一部です。
したがって、スキーマ<!> gt;データベース。
スキーマには、ビュー、ストアドプロシージャ、データベース、トリガーなどが含まれます。
スキーマは、データベース全体の計画ではありません。データベース内のオブジェクトのサブセット(テーブルなど)のプラン/コンテナです。
これは、必ずしも同じ機能カテゴリに分類されない複数のオブジェクト(テーブルなど)を1つのデータベース内に保持できるということです。したがって、それらをさまざまなスキーマの下でグループ化し、さまざまなユーザーアクセス許可を与えることができます。
つまり、1つのテーブルを複数のスキーマの下に置くことができるかどうかはわかりません。 Management Studio UIには、スキーマをテーブルに割り当てるためのドロップダウンが表示されるため、1つのスキーマのみを選択できます。 TSQLを使用すると、異なるオブジェクトIDで2つ(または複数の)異なるオブジェクトが作成される可能性があります。
データベーススキーマは、テーブル、ビュー、ストアドプロシージャなどのオブジェクトを論理的にグループ化する方法です。スキーマはオブジェクトのコンテナと考えてください。 また、テーブルは行と列のコレクションです。 すべてのテーブルを組み合わせてdbを作成します。