DBならスキーマって機能が普通あるもんだと思いますが、実務上あんまり使われない機能の一つです…よね。幾つかシステムを見てきたけど、使ってるものはなかった。でも実は便利かも、というお話。
使い方
"スキーマ名.テーブル名"が認識子となる。CRUD文や外部キー定義等も、すべて"スキーマ名.テーブル名"で行う。もちろん、異なるスキーマ同士での外部キー定義やテーブル結合、ビュー定義も可能。
CREATE SCHEMA hoge;
CREATE TABLE hoge.test_of_hoge
(
id serial NOT NULL,
name text NOT NULL,
value integer NOT NULL,
CONSTRAINT test_of_hoge_pk PRIMARY KEY (id)
)
良さそうなところ
名前空間の分離ができるのが良い。サブシステム間やレガシーシステム等他システムとの共存の場合の制約が少なくなる。テーブル名定義から、無駄な接頭語を追放できる。他システムとの連携も、ある程度まとめられるようならスキーマを分けてもよさそう。名前空間の分離=責任範囲の分離と出来れば、マネージメント上もとても良い。
逆に、アクセス制限には使わないだろうと思う。実運用アプリケーションだと、クライアントからDBサーバへの直接アクセスさせるような設計はほとんどないか、そもそもとっても限られた人しか接続できないようにしてるから、ユーザによるアクセス制限自体が無意味か、どちらか。