---
title: "スキーマとは？ビュー・SQL・整合性制約との違い【基本情報技術者試験】"
description: "RDBMSにおけるスキーマの意味を、ビュー・SQL・整合性制約との違い、3層スキーマ、表やデータとの関係から整理し、基本情報技術者試験で選択肢を切る判断軸を解説します。"
last_modified_at: "2026-07-20"
canonical_url: "https://stemtazoo.github.io/fe/database-schema/"
section: "fe"
---

## まず結論

**スキーマ**とは、

> **データの性質・形式・表同士の関係などを定義した、データベースの設計図**

です。

基本情報技術者試験では、次のように切り分けます。

```text
設計図
→ スキーマ

利用者向けの仮想表
→ ビュー

検索・追加・更新・削除
→ SQL

一貫性を守るルール
→ 整合性制約
```

また、3層スキーマは次の対応で覚えます。

```text
利用者からの見え方
→ 外部スキーマ

データベース全体の論理構造
→ 概念スキーマ

記憶装置への格納方法
→ 内部スキーマ
```

---

## 直感的な説明

社員情報を管理するデータベースを考えます。

```text
社員表
├─ 社員番号：整数
├─ 氏名：文字列
├─ 部署番号：整数
└─ 入社日：日付
```

さらに、社員表の部署番号と部署表の部署番号を関連付けます。

```text
社員表の部署番号
↓
部署表の部署番号
```

このような、

- 表名
- 列名
- データ型
- 主キー
- 外部キー
- 表同士の関係
- 制約

をまとめたものがスキーマです。

住宅にたとえるなら、次のように考えられます。

```text
スキーマ
→ 設計図

表
→ 実際の部屋

データ
→ 部屋に置かれた家具
```

---

## 定義・仕組み

### スキーマに含まれるもの

RDBMSのスキーマには、主に次のような定義が含まれます。

| 項目 | 例 |
|---|---|
| 表 | 社員表、部署表 |
| 列 | 社員番号、氏名、部署番号 |
| データ型 | INTEGER、VARCHAR、DATE |
| 主キー | 社員番号 |
| 外部キー | 部署番号 |
| 制約 | NOT NULL、UNIQUE、CHECK |
| 関係 | 社員表と部署表の関連 |

SQLでは、たとえば次のように表を定義します。

```sql
CREATE TABLE 社員 (
    社員番号 INTEGER PRIMARY KEY,
    氏名 VARCHAR(50) NOT NULL,
    部署番号 INTEGER,
    FOREIGN KEY (部署番号)
        REFERENCES 部署(部署番号)
);
```

このSQL文はスキーマそのものではなく、**スキーマを定義するための命令**です。

### スキーマと表の違い

スキーマは表そのものではありません。

```text
スキーマ
→ 表や列、関係、制約を定義した設計

表
→ その設計に従ってデータを格納する場所
```

たとえば、

```text
氏名は文字列である
→ スキーマ

氏名は「山田太郎」である
→ データ
```

です。

### 3層スキーマ

ANSI/SPARCの3層スキーマでは、データベースの定義を次の3段階に分けます。

| スキーマ | 視点 | 主な内容 |
|---|---|---|
| 外部スキーマ | 利用者からの見え方 | 利用者ごとのデータ範囲、ビュー |
| 概念スキーマ | データベース全体の論理構造 | 表、列、主キー、外部キー、関係 |
| 内部スキーマ | 物理的な格納方法 | ファイル構造、インデックス、物理配置 |

外部スキーマは、サブスキーマと呼ばれることもあります。

覚え方は次のとおりです。

```text
外部
→ どう見えるか

概念
→ どう構成されるか

内部
→ どう保存されるか
```

このテーマは基本情報技術者試験のデータベース分野に含まれます。公式の出題範囲は、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html)から確認できます。

---

## 科目Aでどう出る？

試験では、スキーマそのものの定義だけでなく、似た用語との違いが問われます。

### ビューとの違い

ビューは、実表をもとに作られる仮想的な表です。

```sql
CREATE VIEW 営業部社員 AS
SELECT 社員番号, 氏名
FROM 社員
WHERE 部署番号 = 10;
```

利用者から見ると表のように扱えますが、通常は元の表のデータを参照します。

```text
仮想表
利用者ごとの見せ方
必要な行や列だけ表示
→ ビュー
```

ビューは、外部スキーマを実現する手段の一つと考えられます。

### SQLとの違い

SQLは、RDBMSを定義・操作するための言語です。

| 操作 | SQL文 |
|---|---|
| 検索 | SELECT |
| 追加 | INSERT |
| 更新 | UPDATE |
| 削除 | DELETE |
| 表の定義 | CREATE TABLE |

したがって、

```text
スキーマ
→ 定義された構造

SQL
→ 構造の定義やデータ操作を行う言語
```

です。

### 整合性制約との違い

整合性制約は、不正なデータが登録されないようにするルールです。

代表例は次のとおりです。

- 主キー制約
- 外部キー制約
- NOT NULL
- UNIQUE
- CHECK

たとえば、存在しない部署番号を社員表に登録させない仕組みは、外部キー制約で実現できます。

整合性制約はスキーマに含まれる定義の一部ですが、スキーマ全体と同じ意味ではありません。

### 選択肢を切る判断表

| 選択肢の表現 | 用語 |
|---|---|
| データの性質・形式・関連の定義 | スキーマ |
| 実表ではない仮想的な表 | ビュー |
| 挿入・更新・削除・検索 | SQL |
| 一貫性を保つための制約 | 整合性制約 |
| 利用者ごとの見え方 | 外部スキーマ |
| データベース全体の論理構造 | 概念スキーマ |
| 記憶装置への格納方法 | 内部スキーマ |

試験中は、次の順番で判断します。

```text
1. 「仮想表」ならビュー
2. 「性質・形式・関連の定義」ならスキーマ
3. 「検索・追加・更新・削除」ならSQL
4. 「一貫性を守る制約」なら整合性制約
5. 「利用者・論理構造・物理格納」で3層を切り分ける
```

---

## どんな場面で使う？

### データベース設計

システム開発では、まずどのようなデータを管理するかを整理します。

```text
顧客
注文
商品
在庫
```

そのうえで、表・列・データ型・関係・制約を設計します。

この設計内容がスキーマです。

### アプリケーション開発

アプリケーションは、スキーマに従ってデータを保存・検索します。

たとえば、社員番号が整数として定義されているなら、アプリケーション側でもその型に合う値を扱います。

### 権限に応じた見せ方

利用者ごとに必要な情報だけを見せる場合、ビューを使って外部スキーマを構成できます。

```text
一般社員
→ 氏名、部署名だけ見える

人事担当者
→ 氏名、住所、給与も見える
```

---

## よくある誤解・混同

### スキーマはデータそのもの

違います。

スキーマは構造やルールであり、実際の値はデータです。

### スキーマは表だけを定義する

表だけではありません。

列、データ型、主キー、外部キー、表同士の関係、制約なども含みます。

### ビューとスキーマは同じ

違います。

ビューは仮想表です。スキーマはデータベース構造全体の定義です。

### SQLとスキーマは同じ

違います。

SQLは、スキーマを定義したり、データを操作したりするための言語です。

### 整合性制約がスキーマそのもの

整合性制約はスキーマの一部です。

```text
スキーマ
├─ 表
├─ 列
├─ データ型
├─ 関係
└─ 整合性制約
```

### 概念スキーマと内部スキーマを混同する

- 概念スキーマ：データの意味や関係をどう整理するか
- 内部スキーマ：データを記憶装置へどう格納するか

```text
E-R図・表定義・正規化
→ 概念スキーマ

ファイル編成・インデックス・物理配置
→ 内部スキーマ
```

---

## まとめ（試験直前用）

- スキーマは、データベース構造を定義した設計図
- 表、列、データ型、関係、制約などを含む
- ビューは、実表をもとにした仮想表
- SQLは、データベースを定義・操作する言語
- 整合性制約は、一貫性を守るためのルール
- 外部スキーマは見え方、概念スキーマは論理構造、内部スキーマは物理格納
- 整合性制約はスキーマの一部だが、スキーマ全体ではない

覚える一文はこれです。

> **スキーマは設計図、ビューは見せ方、SQLは操作する言語、制約はルール。**
