はじめに
postgresqlを使い始めてからDB設計をし始めたのですが、これまで意識していなかったスキーマってなんだ?という状態に。
調べてみると他のDBでもある模様でしたがpostgresqlなりの使い方もあるものだということがわかりましたので記事にしました。
スキーマとは
言葉で言い表すほどの知識がないのでAIさんに尋ねました。
PostgreSQL のスキーマとは、データベース内のオブジェクト(テーブルやビュー、インデックスなど)を格納する名前空間です。フォルダのようなもので、データを一括処理したり、別のスキーマに格納したりする際に使用します。
だそうです。
権限で分ける
おそらくスタンダードな使い方はこれではないでしょうか?
・外から触られる(データを入れられる)領域
・内側で閉じたい(業務データを入れる)領域
・共通領域
こんな感じで3つの構成にすることが多いです。
それぞれ利用可能なロールないしユーザーの権限を付与できますし、スキーマに対してusageをFalseにして特定のユーザに使うことすら不可ともできますので、設計した権限の指針を構成するには非常に楽です。
システム間連携
postgresqlはDBを跨いだコネクションが作れませんので、結合する時などは同一のDBに存在している必要があります。
もちろんpostgresql fdwなどを使う手はありますが、小さなシステム群であればスキーマで分けてしまうのも手でしょう。
名前空間を分離する
スキーマを分けると同じテーブル名を付与できます。
例えば受注と発注というスキーマであった場合、partnerテーブルの意味合いが変わりますが、どちらも同じ名前で定義でき、スキーマを分けたことで異なる意味あいであることを表現できます。
終わりに
こんなところでしょうか。
スキーマごとバッサリ落とすというのも考えられそうですね。
個人的には権限関係が一番活用しやすそうな印象です。
テーブルごとに権限ふっていくの数が多いとけっこう大変ですしね。
いつ使えばいいんだろうと思っていましたが、ある程度実務で行っている使い方とマッチしていて一安心です。