【すきーま】

スキーマ とは?

最終更新:
💡 データの形を決める「設計図」

データの構造・型・制約などを定める設計情報。データベースのテーブル定義などを指し、PostgreSQLなどではテーブルをまとめる名前空間もスキーマと呼ぶ。

📌 このページのポイント
スキーマ:構造とルール 名前空間 public(PostgreSQLの例) users id : INTEGER / PK name : TEXT email : TEXT orders id : INTEGER / PK user_id : INT / FK total : DECIMAL orders.user_id が users.id を参照 PK:主キー FK:外部キー 実際の利用者や注文の値ではなく、定義の図
構造定義の例。外枠は名前空間public、破線は外部キーの参照関係を表す。定義した制約の範囲でデータを検査する。
ひよこ ひよこ
スキーマって何?
ペンギン先生 ペンギン先生
データの「設計図」だよ。DBなら「usersテーブルにはidとnameがあり、idは整数の主キー、nameは文字列」といった定義を指す。中に入っている個々の利用者データとは区別するんだ。
ひよこ ひよこ
public.usersのpublicもスキーマなの?
ペンギン先生 ペンギン先生
そう。PostgreSQLではpublicのようにテーブルなどをまとめる名前空間もスキーマと呼ぶ。public.usersは「publicというスキーマのusersテーブル」という指定だよ。
ひよこ ひよこ
スキーマを変更するとどうなるの?
ペンギン先生 ペンギン先生
カラムの追加や削除など、構造を変える作業になる。これをマイグレーションと呼ぶことがあるよ。既存データやアプリへの影響、処理時間は変更内容やDBによる。ツールを使えば必ず安全、というわけではないんだ。
ひよこ ひよこ
スキーマレスなら定義や検査はいらない?
ペンギン先生 ペンギン先生
必須の固定構造がない、という意味で使われるけれど、ルールが不要とは限らないよ。MongoDBは異なるフィールドの文書を保存でき、DB側で型や値の検証ルールを設定する機能も持っている。
ひよこ ひよこ
JSONやGraphQLのスキーマも同じ?
ペンギン先生 ペンギン先生
構造を定めるという考え方は共通で、対象が違う。JSON SchemaはJSONのキーや値の型などを検査するための定義。GraphQLスキーマはAPIで問い合わせられるフィールドや型などを定義するもので、DBの保存構造そのものではないよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「スキーマ」って出てきたら「データの形やルールを決める設計情報」と思えばだいたいOK!
📖 おまけ:英語の意味
「Schema」 = 図式・構造・枠組み
💬 データの構造を表す用語。DBの定義を話しているのか、名前空間を話しているのかは文脈で確かめよう。

参考資料

← 用語集にもどる