変更要約: 初版(テクノロジ系・基礎理論〜ハードウェア)
3.9データベース(関係データベース・SQL基礎・トランザクション)
表形式でデータを管理する関係データベース(表・行・列・主キー・外部キー)、データの重複や矛盾を減らす正規化、データを検索・操作するSQLの基礎(SELECT・WHERE)、複数の処理をひとまとまりとして扱うトランザクション(ACID特性・排他制御・コミット・ロールバック)、大量データを分析用に蓄積するデータウェアハウスと規則性を発見するデータマイニングを学びます。
企業活動のあらゆる場面で扱われる顧客情報・在庫情報・売上情報などは、多くの場合表形式で整理されたデータベースに保管されます。この節では最も普及している関係データベースの基本構造と、データを整理する正規化、検索・更新に使うSQL、そして複数人が同時に使っても矛盾が起きないようにするトランザクションの仕組みを学びます。
3.9.1関係データベースと正規化・SQL基礎
- 関係データベース=データを表(テーブル)の形式で管理する方式で、表は行(レコード)と列(フィールド)から構成される。主キー=各行を一意に識別する列(重複・NULL不可)。外部キー=別の表の主キーを参照する列で、表同士の関連付けに使う。
- 正規化=データの重複や矛盾を減らすように表を分割・整理する設計手法。例えば「注文」表に顧客名や住所をそのまま繰り返し持たせるのではなく、「顧客」表を分離し外部キーで参照させることで、住所変更時に1箇所だけ直せばよくなる。
- SQL=関係データベースを操作するための言語。SELECT文でデータを取り出し(
SELECT name FROM customers)、WHERE句で条件を指定して絞り込む(SELECT name FROM customers WHERE city = 'Tokyo')。基礎レベルではまずこの2つの組み合わせの読み方を押さえる。
3.9.2トランザクションとデータ活用
- トランザクション=複数の処理をひとまとまりとして扱い、「全て成功」か「全て失敗(実行前の状態に戻す)」のどちらかにする仕組み(例:口座振替で出金と入金の両方が成功しないと処理全体を取り消す)。ACID特性=トランザクションが満たすべき4つの性質=原子性(Atomicity)(全実行か全取消)・一貫性(Consistency)(データの整合性を保つ)・独立性(Isolation)(同時実行しても互いに影響しない)・耐久性(Durability)(完了した結果は障害があっても失われない)。
- 排他制御=複数の利用者が同じデータに同時に書き込もうとすることによる矛盾を防ぐ仕組み(データにロックをかけ、他の処理からの変更を一時的に禁止する)。コミット=トランザクションの変更内容を確定する操作。ロールバック=トランザクション内の変更を取り消して実行前の状態に戻す操作。
- データウェアハウス=複数の業務システムから集めた大量のデータを分析目的で時系列に蓄積する仕組み。データマイニング=蓄積された大量データから統計的手法等を用いて規則性や関連性(傾向)を発見する手法(例:「ある商品を買う人は別の商品も買う傾向がある」というパターンの発見)。
「主キーは重複・NULL不可、外部キーは他表の主キーを参照」「正規化は重複と矛盾を減らす設計」「ACID=原子性/一貫性/独立性/耐久性」「コミットは確定、ロールバックは取消」が最頻出です。データウェアハウスは蓄積、データマイニングは分析による発見という役割の違いを問う設問も定番です。
ネット通販サイトの注文処理を例に考えてみましょう。データベースには「顧客」表(顧客ID・氏名・住所)と「注文」表(注文ID・顧客ID・商品・金額)があり、「注文」表の顧客ID列は外部キーとして「顧客」表の主キー(顧客ID)を参照します。もし顧客の住所を「注文」表にも直接繰り返し持たせていたら、顧客が引っ越すたびに過去の全注文行を修正する必要が生じて矛盾のもとになりますが、正規化によって表を分離しているためこの矛盾を避けられます。特定の顧客の注文を調べたいときはSELECT * FROM 注文 WHERE 顧客ID = 123のようなSQL(SELECT+WHERE)で絞り込みます。決済処理では「在庫を1つ減らす」「注文レコードを作成する」「決済を記録する」という複数の処理をひとまとめにしたトランザクションとして扱い、途中で通信障害等が起きて一部だけ実行された状態になることを防ぎます。3つの処理が全て成功すればコミットで確定し、途中で失敗すればロールバックで在庫や注文の変更を全て取り消して実行前の状態に戻します。セール中で同じ商品に複数の注文が殺到した場合は排他制御によって在庫データへの同時書き込みを制御し、在庫数が誤って二重に減らされることを防ぎます。こうして蓄積された数年分の注文データはデータウェアハウスとして分析用に整理され、データマイニングによって「この商品を買う人は関連商品も買う傾向がある」といったパターンが発見され、レコメンド機能などに活用されます。
| 用語 | 意味 | 具体例 |
|---|---|---|
| 主キー | 行を一意に識別する列 | 顧客ID |
| 外部キー | 他表の主キーを参照する列 | 注文表の顧客ID |
| コミット | 変更を確定する | 全処理成功で確定 |
| ロールバック | 変更を取り消す | 途中失敗で実行前に戻す |
ひっかけ: 「外部キーは自分の表の中で行を一意に識別するためのものである」は誤りです。それは主キーの役割で、外部キーは他の表の主キーを参照して表同士を関連付ける列です。また「ロールバックは変更内容を確定させる操作」も誤り=それはコミットの役割で、ロールバックは変更を取り消して実行前の状態に戻す操作です。「データマイニングはデータを時系列に蓄積するだけの仕組み」も誤りで、それはデータウェアハウスの役割であり、データマイニングは蓄積データから規則性を分析・発見する技法です。
3.9.3この節のまとめ
- 主キー=行を一意識別・外部キー=他表の主キーを参照。正規化で重複と矛盾を削減
- SELECT+WHEREでデータを絞り込む。ACID(原子性/一貫性/独立性/耐久性)をトランザクションが満たす
- コミット=確定・ロールバック=取消、排他制御で同時書き込みの矛盾を防止。データウェアハウス=蓄積、データマイニング=発見
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. 「注文」表の中に「顧客ID」という列があり、この列は「顧客」表の主キーである顧客IDの値を参照している。この「注文」表の顧客ID列は何と呼ばれるか。
Q2. 銀行の口座振替処理で、出金処理と入金処理のどちらか一方だけが実行された状態を防ぎ、両方成功するか両方とも実行前の状態に戻すかのいずれかにしたい。この仕組みを実現する考え方はどれか。
Q3. トランザクション内の処理が途中で失敗したため、すでに行った変更を全て取り消し、実行前の状態に戻したい。行うべき操作はどれか。

