---
title: "一貫性と整合性の違いとは？データベースで矛盾を残さない考え方【基本情報技術者試験】"
description: "データベースの一貫性と整合性を「トランザクションが守る性質」と「データが矛盾していない状態」に分けて整理し、ACID特性や制約条件との関係をFE試験向けに解説します。"
last_modified_at: "2026-07-25"
canonical_url: "https://stemtazoo.github.io/fe/database-consistency/"
section: "fe"
---

## まず結論

データベースでは、**一貫性** と **整合性** はとても近い言葉です。

基本情報技術者試験では、次のように分けて考えると判断しやすくなります。

| 用語 | ざっくり言うと | 見るポイント |
|---|---|---|
| 一貫性 | トランザクションの前後で、正しい状態を保つ性質 | ACID特性のC |
| 整合性 | データ同士に矛盾がない状態 | 制約やルールを満たしているか |

つまり、**整合性が保たれた状態を、トランザクションの前後でも維持する性質が一貫性**です。

試験では、ACID特性の選択肢として出た場合、  
**「矛盾を残さない」「整合性を保つ」** とあれば、**一貫性**を選びます。

## 直感的な説明

一貫性と整合性は、ネットショップの注文処理で考えると分かりやすいです。

例えば、商品Aの在庫が10個あるとします。

お客さんが商品Aを3個注文すると、データベースでは次のような更新が必要です。

```text
在庫数：10個 → 7個
注文履歴：商品Aを3個注文
請求情報：商品A 3個分を請求
```

このとき、データが次のようになっていたら自然です。

```text
在庫数は7個
注文履歴は3個
請求情報も3個分
```

このように、データ同士が矛盾していない状態が **整合性がある状態** です。

反対に、次のような状態は困ります。

```text
在庫数は7個に減っている
注文履歴は残っていない
請求情報だけ3個分ある
```

データのつじつまが合っていません。

このような矛盾した状態を残さないように、トランザクションの前後で正しい状態を保つ性質が **一貫性** です。

イメージとしては、

```text
整合性：データが矛盾していない状態
一貫性：その正しい状態を処理の前後で保つ性質
```

です。

## 定義・仕組み

データベースの整合性とは、データがルールや制約に合っていて、矛盾していない状態のことです。

例えば、次のようなルールがあります。

| ルールの例 | 矛盾している状態の例 |
|---|---|
| 在庫数は0以上 | 在庫数が -3 になる |
| 注文には存在する顧客IDが必要 | 存在しない顧客IDで注文される |
| 社員番号は重複しない | 同じ社員番号の社員が2人いる |
| 外部キーは参照先が存在する | 存在しない商品IDを注文明細が参照する |

このようなルールを守っている状態が、整合性が保たれた状態です。

一方、一貫性は、ACID特性の1つです。

トランザクションを実行する前にデータベースが正しい状態なら、実行後も正しい状態になるようにする性質です。

```text
処理前：整合性がある
  ↓ トランザクション
処理後：整合性がある
```

つまり、一貫性は、整合性を守るためのトランザクションの性質として考えると分かりやすいです。

このテーマは、基本情報技術者試験の「データベース」と関係する内容です。公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html) から確認できます。

## 科目Aでどう出る？

科目Aでは、一貫性はACID特性の1つとして出題されやすいです。

判断するときは、次の表で切り分けます。

| 問題文の表現 | 選ぶ性質 |
|---|---|
| データの矛盾が生じない | 一貫性 |
| 整合性が保たれる | 一貫性 |
| データベースが正しい状態から正しい状態へ移る | 一貫性 |
| 完全に行うか、全く行わない | 原子性 |
| 同時実行しても結果が変わらない | 独立性 |
| コミット後の結果が失われない | 耐久性 |

注意したいのは、問題文に **整合性** という言葉が出ても、選択肢では **一貫性** を選ぶことがある点です。

例えば、次のような説明です。

```text
トランザクションの実行前後で、
データベースの整合性が保たれる。
```

これは、ACID特性の **一貫性** の説明です。

## どんな場面で使う？

問題文では、用語名を選ぶよりも、データが矛盾していないかを読み取る場面で役立ちます。

例えば、注文処理で次のような流れがあったとします。

```text
1. 在庫数を減らす
2. 注文履歴を追加する
3. 請求情報を登録する
```

このとき、途中でエラーが起きた場合に、在庫数だけ減った状態を残すと整合性が崩れます。

```text
在庫数だけ減る
注文履歴がない
請求情報もない
```

この状態では、実際には注文が成立していないのに、在庫だけが減っています。

問題文で読むときは、次の点を確認すると安全です。

```text
1. 更新されるデータが複数あるか
2. そのデータ同士にルールや対応関係があるか
3. 途中失敗時に矛盾した状態が残らないか
```

特に、在庫、注文、請求、残高、入出金のように、複数のデータが連動する場面では、整合性を意識して読むと理解しやすくなります。

## よくある誤解・混同

### 誤解1：一貫性と整合性を完全に別物だと思う

一貫性と整合性は、完全に無関係な言葉ではありません。

むしろ、かなり近い関係です。

| 見方 | 意味 |
|---|---|
| 整合性 | データが矛盾していない状態 |
| 一貫性 | トランザクションの前後で、その状態を保つ性質 |

FE試験では、厳密な言葉の違いを深追いするより、  
**ACIDのCとして問われたら一貫性** と判断することが大切です。

### 誤解2：一貫性を「見た目がそろっていること」と考える

一貫性は、画面表示や表記ゆれがそろっているという意味ではありません。

データベースでは、データのルールや関係が崩れていないことを指します。

```text
商品IDが存在する
在庫数が0以上
注文と請求が対応している
```

このような状態を守る話です。

### 誤解3：整合性は人があとから確認するものだけだと思う

整合性は、人が目で確認するだけではありません。

データベースでは、制約を使って整合性を保つことがあります。

| 制約の例 | 守ること |
|---|---|
| 主キー制約 | 同じIDを重複させない |
| 外部キー制約 | 存在しないデータを参照させない |
| NOT NULL制約 | 必須項目を空にしない |
| CHECK制約 | 値の範囲や条件を守る |

このような制約は、データの整合性を守るための仕組みです。

### 誤解4：ACIDの一貫性と原子性を混同する

一貫性と原子性は、特に混同しやすいです。

| 性質 | 判断の合図 |
|---|---|
| 原子性 | 全部実行するか、全部取り消す |
| 一貫性 | データの矛盾を残さない |

「全く処理しなかったように取り消す」とあれば、原子性です。

「矛盾が生じない」「整合性が保たれる」とあれば、一貫性です。

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

- 整合性は、データ同士に矛盾がない状態
- 一貫性は、トランザクションの前後で整合性を保つ性質
- ACID特性のCは **一貫性**
- 「整合性が保たれる」と出たら、一貫性を疑う
- 「全部実行 or 全部取消」は原子性なので混同しない
