本文へ移動

基本情報技術者試験 · 学習ガイド

データベース

データベースとは

データベースとは、データを重複なく整理して管理する仕組みで、正規化やトランザクションが土台になります。

注文ごとに重複した顧客情報を一か所にまとめ、各注文から参照する図。
同じ顧客の住所を注文ごとに保存すると、一部だけ更新して不整合が生じることがあります。顧客情報を分けて参照する設計で、更新箇所をまとめます。

注文表の全行に顧客住所を繰り返し書くと、一部だけ変更されて住所が食い違うことがあります。正規化はこのような更新の不整合を減らします。

基本の仕組み

基本の仕組みの図解。中央の縦仕切りを挟み、左の注文表には顧客番号だけ、右の顧客表には顧客番号と住所を置く。同じ顧客番号を左から右への矢印で結び、住所の書き換えは右の表だけで示す。
覚えること:顧客番号で決まる住所は顧客表で変更

注文表に顧客番号と住所を毎回書く代わりに、顧客番号で決まる住所を顧客表へ分け、注文表には顧客番号だけを置きます。住所変更を一か所で行えるようになります。

トランザクションは一まとまりの処理です。振込みなら引落しと入金をまとめ、途中で失敗したらロールバックすることで片方だけの更新を防ぎます。

正規化は表を細かく分けること自体が目的ではありません。関数従属性を確認し、分けた表を結合すれば元の関係を正しく復元できるように設計します。

関係モデルの制約

関係モデルの制約の図解。中央に縦の仕切りを置き、左の参照元の表の外部キーから、右の参照先の表に実在する行の主キーへ矢印を引く。主キーはその表の行を一意に識別するものとして描く。
覚えること:外部キーは別表の実在する行を参照

主キーは行を一意に識別し、外部キーは別表を参照します。正規化は重複と更新時の不整合を減らすため、関数従属を見て表を分割します。参照整合性は存在しない参照先を作らない制約で、トランザクションの原子性とは別です。

関係モデルの制約
概念対象
主キー行の一意性
外部キー別表の参照
正規化重複と更新異常の抑制

トランザクションの性質と障害回復

トランザクションの性質と障害回復の図解。中央に「更新途中」のデータ、左に「開始前」の状態を置き、上から「異常終了」の矢印を中央へ向ける。中央から左へ戻る矢印に「ロールバック」と添え、その矢印のそばに「更新前ログ」を配置する。
覚えること:途中で異常終了→更新前ログでロールバック

トランザクションが満たすべき性質は、頭文字をとってACID特性と呼びます。処理が確定したことをコミット、取り消して開始前に戻すことをロールバックといいます。

障害回復では、トランザクションの途中で異常終了したら、更新前ログを使うロールバックで取り消します。ディスク障害では、バックアップを戻してから更新後ログを適用するロールフォワードで、コミット済みの更新を再現します。

複数のトランザクションが同じデータを更新するときはロックで排他制御します。読取り用の共有ロックどうしは同時に掛けられますが、更新用の専有ロックは他のロックと両立しません。互いのロック解除を待ち合うとデッドロックになります。

トランザクションの性質と障害回復
特性意味
原子性(Atomicity)全て実行されるか、全く実行されないか
一貫性(Consistency)実行前後でデータの整合性が保たれる
独立性(Isolation)同時に実行しても互いに影響しない
耐久性(Durability)コミットした結果は障害後も失われない
トランザクションの性質と障害回復
障害回復方法使う情報
トランザクションの異常終了ロールバック更新前ログ
ディスク(媒体)障害ロールフォワードバックアップと更新後ログ

試験に出る

  • 正規化は更新の不整合や重複を減らすこと。
  • 関数従属性を確認し、結合して元の関係を復元できるよう設計すること。
  • ACID特性(原子性・一貫性・独立性・耐久性)の区別と、原子性を保つロールバック。
  • 障害回復のロールバック(更新前ログで取消し)とロールフォワード(バックアップ+更新後ログで再現)の使い分け。
  • 共有ロックどうしは両立し、専有ロックは他のロックと両立しないこと。

重要な言葉

正規化
データの重複や更新の不整合を減らすよう表を整理すること。
トランザクション
一まとまりとして扱う処理。途中で失敗したら全体を取り消す。
原子性
処理が全て行われるか、全く行われないかを保証する性質。
関数従属性
ある属性が決まれば別の属性が決まる関係。
ロールフォワード
バックアップ時点から更新後ログを適用し、障害直前のコミット済み状態まで戻す回復方法。

確認問題

確かめよう引落しだけ完了し入金が失敗した状態を残してよい?

いいえ。原子性を保つため全体を取り消すなどの処理が必要です。

トランザクションの途中で失敗したら、全体を取り消す。

正規化は、表を細かく分けること自体が目的である。

途中で失敗したときに全体を取り消す性質を何という?

データの重複や更新の不整合を減らすための整理は?

注文表の全行に顧客住所を繰り返し書くと、一部だけ変更されて住所が食い違うことがあります。はこのようなを減らします。

注文表に顧客番号と住所を毎回書く代わりに、で決まる住所を顧客表へ分け、注文表には顧客番号だけを置きます。を一か所で行えるようになります。

は一まとまりの処理です。振込みなら引落しと入金をまとめ、途中で失敗したらすることで片方だけの更新を防ぎます。

正規化は表を細かく分けること自体が目的ではありません。を確認し、分けた表を結合すれば元の関係を正しくできるように設計します。

出典・参考資料

試験の公式案内と、この記事の参考にした学習資料です。

編集:Pinternet Works · 更新日:

教材の編集方針・訂正について