データベース基本概念

スキーマ すきーま

データベーステーブル定義データ型DDLER図データモデル
スキーマについて教えて

簡単に言うとこんな感じ!

スキーマは「データベースの設計図」だよ!「顧客テーブルには名前・メールアドレス・電話番号を入れる」「年齢は数字だけOK」みたいなルールをまとめたものなんだ。建物でいう間取り図みたいなイメージで、実際のデータを入れる前に「どんな形でデータを管理するか」を決めておく仕組みってこと!


スキーマとは

スキーマ(Schema)とは、データベースの構造・構成を定義した「設計図」のことです。どんなテーブル(表)があり、各テーブルにどんな列(カラム)があり、それぞれの列にどんなデータ型(文字列・数値・日付など)が入るか、といったルールをまとめたものです。ギリシャ語で「形・図式」を意味する言葉が語源で、データの「型」を定義するという意味合いがそのまま使われています。

スキーマはいわばデータの入れ物の仕様書です。たとえばExcelで言うと、「A列に名前、B列に金額(数値のみ)、C列に日付」という列の設定をファイル全体に適用したようなイメージです。実際のデータ(行)を入れる前に、この設計図を先に作っておくことで、誤ったデータの混入を防いだり、複数のシステムがデータを正しく読み書きできるようになります。

システム開発の現場では、スキーマを先に設計することをスキーマ設計またはデータモデリングと呼び、プロジェクトの初期段階で行う重要な作業です。スキーマが曖昧なままシステムを作り始めると、後で「この項目を追加したい」「この列の型を変えたい」という変更が難しくなるため、発注側も概念を理解しておくことが重要です。


スキーマの構成要素

スキーマを構成する主な要素は以下のとおりです。

要素説明
テーブル(Table)データを格納する表の単位customers(顧客)、orders(注文)
カラム(Column)テーブルの列。各データ項目を表すname(名前)、email(メール)
データ型(Data Type)各カラムに入れられる値の種類VARCHAR(文字列)、INT(整数)、DATE(日付)
制約(Constraint)データに課すルールNOT NULL(空不可)、UNIQUE(重複不可)
主キー(Primary Key)各行を一意に識別するカラムcustomer_id
外部キー(Foreign Key)他テーブルとの関連を示すカラムorder.customer_idcustomers.customer_id
インデックス(Index)検索を高速にするための索引email カラムにインデックスを設定

実際のスキーマ定義(DDL)の例

データベースにスキーマを登録するSQL文をDDL(Data Definition Language:データ定義言語)と呼びます。

-- 顧客テーブルの定義(スキーマ)
CREATE TABLE customers (
    customer_id  INT          NOT NULL PRIMARY KEY,
    name         VARCHAR(100) NOT NULL,
    email        VARCHAR(255) UNIQUE,
    birthdate    DATE,
    created_at   TIMESTAMP    DEFAULT CURRENT_TIMESTAMP
);

この CREATE TABLE 文がスキーマそのものです。実際のデータ(山田太郎、taro@example.com…)はまだここには存在しません。

「スキーマ」が指す範囲は文脈で変わる

「スキーマ」という言葉は使われる文脈によって指す範囲が異なります。

【広い意味】
  データベース全体の構造定義

【中程度の意味】
  特定のデータベース内のテーブル群のまとまり
  (PostgreSQLでは名前空間として使われる)

【狭い意味】
  個々のテーブル1つの列定義

発注・会話の場面では「データの設計図全体」という広い意味で使われることが多いです。


歴史と背景

  • 1960年代:大型コンピューターでのデータ管理が始まる。データの構造はプログラムに埋め込まれており、設計図という概念は明確ではなかった
  • 1970年:Edgar F. Codd(IBM)が関係モデル(Relational Model)を提唱。テーブル・行・列という構造が理論化され、スキーマという概念が体系化される
  • 1974年:IBM が SEQUEL(後の SQL)を開発。CREATE TABLE などのDDLによってスキーマを明示的に定義できるようになった
  • 1987年:ISO/IEC が SQL を国際標準として制定(SQL-87)。スキーマの定義方法が標準化される
  • 1990年代:Oracle、MySQL、PostgreSQL などの商用・OSSデータベースが普及。スキーマ設計は業務システム開発の標準工程として定着
  • 2000年代:XML Schema、JSON Schema など、データベース以外でもデータ構造定義に「スキーマ」という概念が広く使われるようになる
  • 2010年代〜NoSQLデータベース(MongoDB等)の台頭で「スキーマレス(事前定義不要)」という設計も登場。スキーマの有無がシステム選定のポイントになる

スキーマあり vs スキーマレス

現代のシステム開発では、スキーマを事前に厳密に定義するスキーマあり型と、定義なしに柔軟にデータを扱うスキーマレス型の2つのアプローチがあります。

スキーマあり vs スキーマレス スキーマあり(RDB) 例: MySQL / PostgreSQL / Oracle ✅ データの整合性が保ちやすい (型・制約で誤入力を防げる) ✅ 複雑な検索・集計が得意 (SQL で柔軟に問い合わせ) ⚠️ 仕様変更時の設計変更が大変 (ALTER TABLE が必要) 📌 向いている用途: 基幹システム・会計・在庫管理 スキーマレス(NoSQL) 例: MongoDB / DynamoDB / Firestore ✅ 構造が自由・追加が簡単 (項目ごとに形が違ってもOK) ✅ 大量データのスケールが得意 (分散処理しやすい) ⚠️ データの一貫性管理が難しい (アプリ側で制御が必要) 📌 向いている用途: SNS・IoT・ログ収集・カタログ
比較項目スキーマあり(RDB)スキーマレス(NoSQL)
事前定義必須不要
データ整合性高いアプリ側で担保
仕様変更への対応やや硬直柔軟
複雑な集計・検索得意苦手なケースも
代表製品MySQL, PostgreSQLMongoDB, DynamoDB

JSON Schema・XML Schema との関連

「スキーマ」はデータベースだけの概念ではありません。APIやファイルのデータ構造定義にも使われます。

種類使われる場面
DB スキーマリレーショナルDB の構造定義CREATE TABLE
JSON SchemaREST API のリクエスト・レスポンス検証OpenAPI / Swagger
XML Schema(XSD)XML ファイルの構造検証電子申請・EDI
GraphQL SchemaGraphQL API の型定義type User { id: ID! }

関連する規格・RFC

規格・RFC番号内容
ISO/IEC 9075-1SQL の国際標準。スキーマ定義(DDL)を含む
RFC 8927JSON Type Definition(JTD): JSON スキーマの標準化仕様
RFC 6901JSON Pointer: JSON 構造内の要素参照(スキーマと組み合わせて利用)

関連用語

  • テーブル — データベースでデータを行・列の表形式で格納する基本単位
  • 主キー — テーブルの各行を一意に識別するためのカラム
  • 外部キー — テーブル間の関連を定義するカラム。参照整合性を保つ
  • ER図 — テーブル間の関係をビジュアル化したスキーマ設計図
  • SQL — データベースを操作するための標準言語。DDLでスキーマを定義する
  • DDLCREATE TABLE などスキーマを定義・変更するSQL文の分類
  • 正規化 — スキーマ設計においてデータの重複を排除する手法
  • NoSQL — スキーマレス設計を採用する非リレーショナルデータベースの総称