データベースのスキーマを作成するCREATE SCHEMAと削除するDROP SCHEMA SQL

データベースには、スキーマ(Schema)と呼ばれるオブジェクトがあります。

スキーマとは、データベース内のテーブルやビューなどのオブジェクトのコンテナであり、スキーマ名はコンテナ(入れ物のようなもの)の名前になります。
データベース内の複数のオブジェクトをグループ化する名前空間(ネームスペース)と考えるとわかりやすいかもしれません。

スキーマはテーブルなどのオブジェクトをグループ化するものなので、同じスキーマ内に同じ名前のテーブルを複数作成することはできませんが、スキーマが違えば同じ名前のテーブルをそれぞれのスキーマに作成することができます。

例えば、abcというスキーマと、xyzいうスキーマがあり、abcスキーマには、AテーブルとBテーブル。xyzスキーマには、YテーブルとZテーブルがあるとします。
abcスキーマにAというテーブルがある状態で、さらにabcスキーマにAテーブルを作成することはできませんが、別スキーマのxyzスキーマには、Aというテーブルを作成することができます。

スキーマはユーザーに割り当てられます。
ユーザーは、割り当てられたスキーマに属するテーブルなどのオブジェクトを参照することができます。

今回は、データベースのスキーマをSQLで作成、または削除する方法について紹介します。

スキーマを作成する

スキーマを作成する際には、CREATE SCHEMA文を使用します。
CREATE SCHEMAと記述した後にスペース文字列(改行文字列等でも可)を入れて、その後に作成するスキーマの名前を記述します。

例えば、scmという名前のスキーマを作成するのであれば、以下のようになります。

スキーマを所有するユーザーの指定

データベースによっては、スキーマを作成する際に、スキーマを所有するユーザーを指定することができるものもあります。
例えばPostgreSQLでは、CREATE SCHEMA文で以下のように記述することで、スキーマを所有するユーザー(ロール)を指定することができます。

スキーマを削除する

スキーマを削除する際には、DROP SCHEMA文を使用します。
CREATE SCHEMA文と同様に、DROP SCHEMAと記述した後にスペース文字列入れて、その後に削除するスキーマの名前を記述します。

例えば、上記で作成したscmというスキーマを削除する場合は、次のように記述します。

オブジェクトが存在するスキーマの削除

削除するスキーマに属するオブジェクト(テーブルなど)がある場合にDROP SCHEMA文を実行すると、原則としてエラーが発生します。
データベースによっては、スキーマを削除する際に、スキーマに所属するテーブルなどのオブジェクトを一緒に削除できるものもあります。
例えばPostgreSQLでは、DROP SCHEMA文で以下のように記述することで、スキーマに所属するオブジェクトがある場合でもスキーマを削除することができます。

補足

スキーマはデータベースの種類によって、その位置づけが異なります。
スキーマはデータベースの1つのオブジェクトであり、データベース内に複数作成できるものや、スキーマとデータベースが同じ意味合いであり、データベース = スキーマとなるものもあります。
また、スキーマを持たないデータベースもあります。