スキーマとディレクトリは同じ仕組み?
PHP部やWEBサービス部を受講した人はDB(データベース)というものが大体分かってきたと思いますが、ここで、DBに欠かすことの出来ない知識として「スキーマ」という仕組みについて解説をしていきたいと思います。
スキーマというのはDBにある仕組みで、私達が普段使っている「フォルダ(ディレクトリ)」のようなものです。
ディレクトリが「DB」、その中に保存するファイル自体が「テーブル」
だと思ってください。
ファイルを保存する時には名前をつけますが、同じフォルダ内に同じ名前のファイルは作れませんよね。(PHPオブジェクト指向部でやる名前空間もこういうイメージですね)
さらには、そのPCを利用するユーザーによって、あるディレクトリ内のファイルを触れなくしたり、開くだけで書き込めなくしたり、といった「アクセス制限」を授けることができます。
(「権限」といって、そのファイルを管理している「管理者」(通常、ファイルやディレクトリを作った人)がユーザーごとに権限をつけることができます)
RDMSの中身
DBも同じように「スキーマ」といった仕組みをもっています。
RDMS(リレーショナルデータベースマネジメントシステム)が一般的なDBと呼ばれるものですが、その正体はただの「PCのソフト」でしたね。
RDMSというのは「大量のデータをリアルタイムで読み書きしやすく保管できるPCソフトの1つ」です。
そのRDMSというソフトにはいくつも種類があり、ウェブカツでは無料で使えて現場で最も使われているOracle社の出している「MySQL」というソフト(製品)を使っていきましたね。
なので、PCの中にはこんなイメージでRDMSが入っているわけです。
MySQLのスキーマ
MySQLでは、このRDBMSというソフトの中で、DB(データベース)をいくつも作ることができました。
DBに名前をつけて作ってましたね。
実は、このDB1つ1つが「スキーマ」なんです。
なので、別のスキーマに同じ名前のテーブルを作ることができます。
さらには、スキーマごとに管理者(何も設定しないとスキーマの作成者が管理者になる)がいるので、管理者が権限をつけることができます。
(ウェブカツでは、RDBMSを使う際にユーザーは自分しかいませんでしたが、いくつもユーザーを作ることができるので、実際の現場ではエンジニアごとにユーザーを作って、「あなたはテーブルを作れるユーザー」「あなたは削除もできるユーザー」「あなは新人だから、変更したり出来ないユーザー」など割り振ることもあります)
これが、スキーマと呼ばれるものです。
ちなみに無料のRDBMSでもう1つ有名なソフト「PostgreSQL」では、DBというものが1つ(RDBMSソフト1つがDB1つ)あり、その中でスキーマをワケてテーブルを作ることができます。
MySQLでは、「1つのDB=1つのスキーマ」ですが、PostgreSQLでは「1つのDBの中に複数のスキーマという入れ子になっている」というこですね。
なので、複数のサービスを運営している現場などに入った場合、「同じDBを使っているんですか?」と聞くのは「初心者だな」と思われるのでやめておきましょう。
なぜなら、今解説したようにPostgreSQLであれば同じDBを使っていても「別スキーマ」でテーブルを管理しているなら「同じDB」ですし、同じ状況でもMySQLであれば「別のDBで管理」と言えます。
DBという言葉自体も「RDBMS」のソフト自体を言っているのか、MySQLでいうところの「DB=スキーマ」を言っているのか分からないからです。
なので、「別のスキーマで管理してるんですか?」と聞くようにしましょう。
ちなみに私が昔いた現場では、別サービスなのに同一スキーマ(同じスキーマ)で管理をしているという驚くべきこともありました。
同じスキーマを使うということは、同じフォルダに全く関係のない情報を入れて管理をしているという事です。