ITパスポート 2022年 問77
問題文
トランザクション処理のACID特性に関する記述として、適切なものはどれか。
選択肢
ア:索引を用意することによって、データの検索時の検索速度を高めることができる。
イ:データの更新時に、一連の処理が全て実行されるか、全く実行されないように制御することによって、原子性を保証することができる。(正解)
ウ:データベースの複製を複数のサーバに分散配置することによって、可用性を高めることができる。
エ:テーブルを正規化することによって、データに矛盾や重複が生じるのを防ぐことができる。
🔒 解説は解答すると表示されます
トランザクション処理のACID特性に関する記述【ITパスポート 解説】
正解の理由
選択肢の中でトランザクション(処理のまとまり)の「原子性」を説明しているのは イ です。
トランザクション(複数の処理を一つの単位として扱う仕組み)で「原子性(Atomicity)」とは、トランザクション内の一連の処理が「全て実行されるか、全く実行されないか」のどちらかになる性質です。途中で失敗すれば「全て取り消す(ロールバック)」ことで、途中半端な状態を残さないことを保証します。イ はこの説明をそのまま示しているため正解です。
トランザクション(複数の処理を一つの単位として扱う仕組み)で「原子性(Atomicity)」とは、トランザクション内の一連の処理が「全て実行されるか、全く実行されないか」のどちらかになる性質です。途中で失敗すれば「全て取り消す(ロールバック)」ことで、途中半端な状態を残さないことを保証します。イ はこの説明をそのまま示しているため正解です。
解法ステップ
- 「トランザクション処理のACID特性」とあるので、まずACIDの4つの意味を思い出す。
- A: Atomicity(原子性)…全か無か
- C: Consistency(一貫性)…定義されたルールを満たす
- I: Isolation(独立性)…同時実行でも干渉しない
- D: Durability(永続性)…コミット後は消えない
- 各選択肢を読んで、どのACID要素に対応するかを当てはめる。
- ACIDに関連しない技術(索引、複製、正規化の設計上の効果)は除外する。
- 「全て実行されるか全く実行されないか」を述べている イ を選ぶ。
選択肢別の誤答解説
-
ア: 索引を用意することによって、データの検索時の検索速度を高めることができる。
→ これは正しい文ではありますが、索引(インデックス:検索を速くする仕組み)は性能改善の話です。ACIDのいずれの特性(原子性・一貫性・独立性・永続性)とも直接関係しません。したがって本問の正解にはなりません。 -
イ: データの更新時に、一連の処理が全て実行されるか、全く実行されないように制御することによって、原子性を保証することができる。
→ これが正解です。トランザクションの「原子性(Atomicity)」を正しく説明しています。例:銀行の振替処理で、送金側の口座から引き落としが成功しても入金側に反映されなければ全てを取り消す動作(ロールバック)を行います。 -
ウ: データベースの複製を複数のサーバに分散配置することによって、可用性を高めることができる。
→ これも正しい記述ですが、可用性(availability)はシステムの運用・冗長化の話です。ACIDの「D(永続性)」などと混同しやすいですが、ACIDはトランザクション単位の性質を表す用語であり、複製配置はACIDの一部ではありません。 -
エ: テーブルを正規化することによって、データに矛盾や重複が生じるのを防ぐことができる。
→ 正規化(データベース設計手法)は冗長性の削減や更新異常の防止に役立ちます。結果的にデータ整合性に寄与しますが、ACIDの「C(一貫性)」が示すものは「トランザクション前後でデータがデータベースの制約(例:参照整合性、型、ビジネスルール)を満たしていること」を指します。正規化は設計時の手法であり、ACIDの定義そのものではないため、本問の正解にはなりません。
よくある誤解
-
「正規化=ACIDの一貫性だ」と考える誤解
- 正規化は設計手法で、データの重複や更新時の矛盾を減らします。一方、ACIDの「一貫性(Consistency)」はトランザクションの前後でデータが制約を満たしていることを指します。目的は似ていますが、役割(設計 vs トランザクション特性)が違います。
-
「永続性=バックアップや複製のこと」だと考える誤解
- 永続性(Durability)は一度コミットしたトランザクションの結果がシステム障害後も失われない性質です。バックアップや複製は永続性を支援する手段ですが、永続性そのものは「コミット後の結果が確実に保存されること」を意味します。
-
「性能改善技術(索引など)」をACIDと混同する
- 索引やキャッシュは性能(検索速度など)に関わる話であり、ACIDとは別の領域です。問題文で「ACID特性に関する記述」とあれば性能面の選択肢は疑うべきです。
補足コラム
トランザクションのイメージを身近な例で説明します。銀行の振替操作を考えます。
- 操作A: 口座Xから1万円引き落とす
- 操作B: 口座Yに1万円入金する
これらは一連の処理で、途中で失敗して口座Xだけ減ってしまうと整合性が壊れます。そこで「振替処理」をトランザクションにして、両方が成功したときだけ「確定(COMMIT)」、どれか失敗したら「取り消し(ROLLBACK)」します。これが原子性(Atomicity)です。
実際のSQL例(簡単なイメージ):
BEGIN; -- トランザクション開始
UPDATE accounts SET balance = balance - 10000 WHERE id = 'X';
UPDATE accounts SET balance = balance + 10000 WHERE id = 'Y';
-- どちらも成功したら
COMMIT; -- 変更を確定
-- どれか失敗したら
ROLLBACK; -- 変更を元に戻す
覚え方のコツ: ACIDの英語をそのまま短く覚えると便利です(Atomicity, Consistency, Isolation, Durability)。日本語だと「原子性・一貫性・独立性・永続性」となります。
FAQ
Q1: 「一貫性」と「独立性」はどう違うのですか?
A1: 一貫性は「データが定められたルール(制約)を満たしていること」です。独立性(Isolation)は「複数のトランザクションが同時に走っても互いに影響を与えず、あたかも順番に実行されたように見えること」です。
A1: 一貫性は「データが定められたルール(制約)を満たしていること」です。独立性(Isolation)は「複数のトランザクションが同時に走っても互いに影響を与えず、あたかも順番に実行されたように見えること」です。
Q2: 正規化をすればACIDは不要ですか?
A2: いいえ。正規化は設計段階でのデータ整合性向上の手法です。ACIDは実行時(トランザクション処理)での性質です。両者は補完関係にあります。
A2: いいえ。正規化は設計段階でのデータ整合性向上の手法です。ACIDは実行時(トランザクション処理)での性質です。両者は補完関係にあります。
Q3: 「永続性」はどうやって保証するのですか?
A3: データベースは通常、コミット時にディスクへ書き出したりログを残したりします。障害時にはログから復元することで、コミット済みの変更が消えないようにします。バックアップやレプリケーションは永続性を強化する手段です。
A3: データベースは通常、コミット時にディスクへ書き出したりログを残したりします。障害時にはログから復元することで、コミット済みの変更が消えないようにします。バックアップやレプリケーションは永続性を強化する手段です。
関連キーワード: ACID, トランザクション, 原子性, 一貫性, 独立性, 永続性, ロールバック, COMMIT, 索引, 正規化, 可用性

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

