【IT用語】スキーマ(schema)とは?DBやJSONでの意味と役割をわかりやすく解説!

アプリケーション開発やデータベース設計の話をしていると、よく耳にする「スキーマ(schema)」という言葉。

なんとなく「データの構造っぽいもの?」というイメージはあるけれど、実際にどんな役割を持つのか、いまいちピンと来ない方も多いのではないでしょうか。

この記事では『スキーマ(schema)』について、以下の内容を図を用いてわかりやすく解説します。

  • スキーマとは?
  • スキーマを定義するメリット
  • 例:データベースのスキーマ
  • 例:JSONのスキーマ

スキーマとは?

スキーマとは、データの構造やルールを定義した設計図のことです。

たとえば家を建てるとき、設計図がなければ「どこに部屋を作るか」「どんな素材を使うか」が分かりませんよね。同じように、スキーマは「データをどんな形で扱うか」を明確にする設計図の役割を持ちます。

スキーマを使うと、以下のようなルールをはっきり決められます。

  • どんな情報を扱うのか(例:ユーザー名、年齢、メールアドレスなど)
  • どんな形式で保存するのか(文字列・数値・日付などの型)
  • どんな制約があるのか(必須項目、重複禁止、値の範囲など)

つまり、スキーマを定義することで、「データの整合性」や「システム間の共通理解」を保つことができます。

スキーマを定義するメリット

スキーマを定義することで、以下のようなメリットが得られます。

メリット

  • データの整合性を保てる
    • 不正なデータや型の間違いを防ぎ、システムの信頼性を高めることができる。
  • システム間での連携がスムーズ
    • 異なるサービスやアプリ間でも、同じルールに従ってデータを扱える。
  • 開発・保守がしやすくなる
    • 仕様がスキーマとして明文化されることで、開発者間の認識ズレを防げる。

例:データベースのスキーマ

データベースのスキーマ

データベースを実装する時には、スキーマを使ってデータベースの構造を定義します。

データベースにおけるスキーマとは、「データベースの構造を定義する設計図」のことです。つまり、「どんなテーブルがあるのか」「各テーブルにどんなカラム(列)があるのか」「テーブル同士がどう関係しているのか」といったデータベース全体の構造を定義します。

データベースのスキーマには、データベースの構造を3つの層に分けて考える「三層スキーマアーキテクチャ(Three-schema architecture)」という考え方があります。

スキーマ役割利用立場
外部スキーマビューに相当する層。
利用者やアプリケーションから見たデータの“見え方”を定義する。
概念スキーマから必要な部分だけを抽出して表示する。
利用ユーザー
概念スキーマデータベース全体の“論理構造”を定義する層。
開発者から見たデータ項目やデータベースの構造を定義する。
テーブル・カラム・データ型・制約・リレーション(関係)などを設計し、テーブル定義書としてまとめる。
アプリケーション開発者/ データベース設計者
内部スキーマデータをどのように“物理的に格納・最適化”するかを管理する層。
ハードウェアの変更はこのスキーマで影響を吸収する。
DBMS(データベース管理システム)

このように三層スキーマを分けることで、

  • 利用者(外部スキーマ)はデータの「見え方」に集中でき、
  • 開発者(概念スキーマ)はデータ構造の「論理的設計」に集中でき、
  • DBMS(内部スキーマ)はデータの「物理的な最適化」に専念できます。

それぞれの役割を明確に分けることで、データベース全体を柔軟かつ安全に運用できるようになります。例えば、データの物理的な構造を変更しても(例えば、ハードウェアの変更)、アプリケーションには影響が及ぶことがありませんし、アプリケーションを変更しても、データの物理的構造を維持できます。

例:JSONのスキーマ

スキーマは、データベースだけでなく「データ交換の世界」でもよく使われます。たとえば、システム間でJSONやXMLのデータをやりとりするとき、そのデータ構造を事前に決めておかないと、受け取る側で正しく処理できません。そんなときに役立つのが「スキーマ」です。

たとえば、ユーザー情報を送るAPIがあるとします。このとき、以下のようなJSONデータがやりとりされるとします。

{
  "name": "Taro Yamada",
  "age": 29,
  "email": "taro@example.com"
}

このデータの形式をルール化するのがJSON Schema(JSONスキーマ)です。

{
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "number" },
    "email": { "type": "string", "format": "email" }
  },
  "required": ["name", "email"]
}

このスキーマでは、次のようなルールを定義しています:

項目備考
name文字列(string)必須
age数値(number)任意
email文字列(string)メール形式で必須

このようにスキーマを定義しておくと、APIの受け取り側で「データが正しい形式かどうか」を自動的に検証できます。たとえば次のようなデータを送ってしまった場合、「ageが文字列」「emailが不正な形式」なので、スキーマ検証でエラーになります。

{
  "name": "Hanako",
  "age": "twenty", 
  "email": "hanako@example"
}

本記事のまとめ

この記事では『スキーマ(schema)』について、以下の内容を説明しました。

スキーマは、データの構造やルールを定義した設計図です。どんな情報を扱うのか、どんな形式で保存するのか、どんな制約があるのかを事前に決めておくことで、データの整合性やシステム間の連携をスムーズに保てます。

特に、データベース設計やAPI開発、JSON/XMLといったデータ交換では欠かせない考え方です。

お読みいただきありがとうございました。

スポンサーリンク