web-dev-qa-db-ja.com

異なるデータベースを使用するデータベースとスキーマの違いは?

MS SQLとMySQLのデータベース用語の違いは何ですか?

MySQLインスタンスに複数のデータベースを含めることはできますか?異なるスキーマしか作成できないようです。ただし、SQLコマンドはcreate database

MS SQLでは、複数のデータベースを作成できます。各データベースにはデフォルトのスキーマdboがありますか?...しかし、データベース内の複数のスキーマはまだ可能ですか?

42
user48545

この link から、MS SQLスキーマがユーザーに結び付けられなくなっていることがわかります。関連する引用は次のとおりです。

スキーマの動作はSQL Server 2005で変更されました。スキーマはデータベースユーザーと同等ではなくなりました。各スキーマは、それを作成したデータベースユーザーとは独立して存在する個別の名前空間になりました。言い換えれば、スキーマはオブジェクトのコンテナにすぎません。スキーマはどのユーザーでも所有でき、所有権は譲渡できます。

MySQLでは、データベースとスキーマはまったく同じものです。コマンドでWordを交換することもできます。つまり、CREATE DATABASEにはCREATE SCHEMAという同義語があります。

MySQLは複数のデータベース(スキーマ)をサポートし、MS SQLは複数のデータベースと複数のスキーマをサポートします。

69
Lance Roberts

一般に、次の記事 Wikipediaで が役に立つことがわかりました。

記事の最後には次のものがあります。

SQL仕様では、「SQLスキーマ」が何であるかが明確になっています。ただし、さまざまなデータベースがそれを誤って実装します。この混乱を悪化させるために、機能は、誤って実装された場合、親データベースの機能と重複する可能性があります。 SQLスキーマは、データベース内の単なる名前空間であり、この名前空間内のものは、メンバー演算子ドット「。」を使用してアドレス指定されます。これは、すべての実装の中で普遍的であるようです。真の完全な(データベース、スキーマ、およびテーブル)修飾クエリは次のように例示されます:select * from database.schema.table

さて、問題は、スキーマとデータベースの両方を使用して、1つのテーブルfooを別の名前付きテーブルfooから分離できることです。以下は擬似コードです:select * from db1.foo vs. select * from db2.foo(dbとテーブルの間に明示的なスキーマはありません)select * from [db1.]default.foo vs. select * from [db1.]alternate.foo(明示的なdbプレフィックスなし)発生する問題は、以前のMySQLユーザーが1つのプロジェクトに対して複数のデータベースを作成することです。この文脈では、MySQLデータベースの機能はPostgresスキーマに類似しています。Postgresには、MySQLにある既製のクロスデータベース機能がないためです。逆に、Postgresはクロステーブル、クロススキーマを実装する仕様をさらに適用し、その後、将来のクロスデータベース機能のための余地を残しています。背後でのMySQLエイリアス、データベースを使用したスキーマ(スキーマの作成、データベースの作成など)は類似しています。

したがって、MySQLはクロステーブル機能を実装し、スキーマ機能を完全にスキップし、データベースの実装に同様の機能を提供したと言えます。要約すると、Postgresはスキーマを完全にサポートしていますが、MySQLがデータベースに対して持ついくつかの機能が欠けていますが、MySQLは真のスキーマをサポートしようとさえしていません。

30
Greg Roberts

MS SQLの「スキーマ」と言うことは、「所有者」を意味すると考えています。

私の理解から、MySQLであなたがするとき

SELECT * from world.city;

このクエリは、worldデータベースからテーブルcityを選択しています。

MsSQLでは、以下を行う必要があります

SELECT * from world.dbo.city;

ここで、「dbo」はテーブルのデフォルトの所有者です。

簡単に入力するには、デフォルトのデータベースを定義します

USE world
SELECT * from city;

MySQLでは、テーブルの所有者を宣言する方法はありません。すなわち。 「dbo」。

4
Yada

MS SQLは、それぞれ1から多数のスキーマを持つ複数のデータベースを完全にサポートします。dboは、後方互換性のためのデフォルトに過ぎません。

2
Andrew