MySQLでのスキーマ


2016年7月20日

今日はデータベースに関する少し細かい話です。

MySQLにスキーマってあるの?


ミドルウェアとして各RDBMSをSQLだけで見た時、その差は許容範囲なことが多いのですが、
根底概念に焦点を当てるとやはり違いが多々あります。

僕は元々ORACLERなので、どうしてもそれをベースにして比較してしまいます。

ORACLEとMySQLを比べてまず気づくのがスキーマ概念です。
Oracleではデータベースとユーザーとスキーマがあります。
MySQLではテーブル等の纏まりをデータベースと呼び、スキーマは同義です。
Oracleではスキーマ所有者という概念がありますが、MySQLには所有者の概念はありません。

もっというと、
ORACLEのデータベースはその中でデータファイルとインスタンスを作成し
更にユーザとスキーマを作成します。
オブジェクト(テーブルやプロシージャ)は、スキーマ単位で作成します。
で、スキーマに属するオブジェクトはロールを付与することで他のユーザが扱うことができるようになります。

それに対しMYSQLはユーザを作成し、各ユーザはデータベースを作成します。
で、各ユーザーは、ロール(権限セット)を付与することで複数のデータベースを扱えるようになります。

概念は相当違えど、結果的にはだいたい同じことができます。
違うのはORACLEがロール単位なのに対し、MySQLは各ユーザーに対して別々に権限を付与する必要がある点です。

こういった痒いところにてが届くのがORACLEの優位性の1つなのでしょうか。