テクノロジ系 技術 頻出

データベース

データを整理して活用するしくみ。表の設計から処理の安全まで。

🎯 このレッスンのゴール

  1. 関係データベースの「表・行・列」と、主キー・外部キーが分かる
  2. E-R図と正規化の考え方を、やさしくイメージできる
  3. 関係演算(選択・射影・結合)とSQLの役割をつかむ
  4. トランザクションのACID特性・排他制御・障害回復を説明できる

こんにちは、先生役の「モニタくん」です。データベースって聞くとむずかしそうですが、正体はきれいに整理された「表」。Excelの表をイメージすれば大丈夫。表の作り方から、たくさんの人が同時に使っても壊れないしくみまで、ゆっくり一緒に見ていきましょう。

データベースとDBMSの役割

データベース(DB)とは、たくさんのデータをあとから探したり・並べ替えたり・集計したりしやすいように整理してためておくしくみのことです。バラバラのメモではなく、決まった形にそろえて保存しておくのがポイントです。

そして、そのデータベースを管理するための専用ソフトをDBMS(データベース管理システム/Database Management System)といいます。DBMSは、データの追加・検索・更新・削除を引き受けるだけでなく、次のような大切な仕事をしてくれます。

たとえ話:DBは「図書館」、DBMSは「司書さん」

大量の本(データ)をただ積み上げただけでは、読みたい本を探せません。背番号をつけて棚に整理したものがデータベース。そして「この本ありますか?」に答えたり、貸出・返却を記録したり、貸出中の本がダブらないよう管理してくれる司書さんがDBMSです。利用者は司書さんにお願いするだけで、棚の細かいことを知らなくてOKです。

関係データベース(表・行・列)

いま最も広く使われているのが関係データベース(リレーショナルデータベース/RDB)です。データを表(テーブル)の形で管理するのが特徴で、表計算ソフトの表とそっくりです。用語をそろえておきましょう。

呼び方別の言い方意味
表(テーブル)関係(リレーション)同じ種類のデータを集めたもの。1つのテーマで1つの表。
行(レコード)組(タプル)1件分のデータ(例:生徒1人分)。横の1行。
列(フィールド)属性(アトリビュート)項目の種類(例:氏名・住所)。縦の1列。

たとえば「生徒」を管理する表は、次のようになります。横の1行が生徒1人(=レコード)、縦の各列が項目(=フィールド/属性)です。

学籍番号氏名クラス電話番号
1001佐藤 一郎A090-1111-1111
1002鈴木 花子B090-2222-2222
1003田中 三郎A090-3333-3333
ここが大事

関係データベースは「表の集まり」。1件分のデータが行(レコード)、項目の種類が列(フィールド/属性)。この対応をしっかり覚えると、以降の話がスッと入ります。

キー:主キーと外部キー

表の中から「この1行」を確実に取り出すための目印がキーです。試験で特に重要なのが、主キーと外部キーの2つです。

主キー(しゅキー/プライマリキー)

主キーは、1つの行を他と区別して特定するための列です。先ほどの表でいえば「学籍番号」がぴったり。主キーには次の3つの厳しいルールがあります。

主キーのルール意味
一意(ユニーク)表の中で値がただ1つに決まる。同じ値の行を1つに特定できる。
重複不可同じ値が2つ以上あってはいけない(だから区別できる)。
NULL不可(空欄禁止)値が空っぽ(NULL)であってはいけない。必ず何か値が入る。
たとえ話:主キー=学籍番号・マイナンバー

同姓同名の人がいても、学籍番号が違えば別人だと確実に分かります。氏名は重複するかもしれないので主キーには向きません。「絶対にかぶらず・必ずあって・1人に決まる」番号こそ主キー。会員番号や社員番号も同じ役割です。

候補キー

主キーになれる資格(一意で重複しない)を持つ列を候補キーといいます。候補キーが複数あるときは、その中から1つを選んで主キーにします。たとえば「学籍番号」も「マイナンバー」もどちらも一意なら、両方が候補キーで、そのうち1つを主キーに決めるイメージです。

外部キー(がいぶキー/フォーリンキー)

外部キーは、別の表の主キーを参照する列です。表どうしをつなぐ「のりしろ」の役割をします。次の例では「成績」表の学籍番号が、「生徒」表の主キー(学籍番号)を参照する外部キーです。

成績表(学籍番号が外部キー)
学籍番号科目点数
1001国語80
1001数学75
1002国語90
注意:参照整合性

外部キーには、参照先の表に存在しない値を入れてはいけないというルール(参照整合性)があります。たとえば「生徒」表に居ない学籍番号「9999」を成績表に入れると、誰の点数か分からず矛盾します。DBMSはこうした矛盾を防いでくれます。

データベース設計:E-R図

表を作る前に、「どんなデータを・どう関連づけて管理するか」を整理する設計図が必要です。よく使われるのがE-R図(実体関連図/Entity-Relationship Diagram)です。

関連には、「1人の生徒が複数の科目を履修する」のような1対多や、「複数の生徒が複数の科目を履修する」多対多といった多重度(カーディナリティ)があります。多対多の関係は、間に「履修」のような表をはさんで整理します。

正規化(重複をなくす)

正規化とは、データの重複をなくし、更新したときの矛盾(不整合)を防ぐために、表を適切に分割していく作業です。なぜ必要なのか、ダメな例で見てみましょう。

具体例:1つの表に詰め込むと困る

下の表は、生徒情報とクラス担任を1つの表に詰め込んでいます。クラスAの担任が変わったとき、Aの行をすべて直さないと、古い担任と新しい担任が混在してしまいます(更新の手間とミスのもと)。これが「更新時の矛盾」です。

悪い例:重複が多い表
学籍番号クラス担任
1001A山田先生
1003A山田先生
1002B佐藤先生

そこで、表を「生徒」と「クラス」に分けると、担任の情報は1か所だけになります。担任が変わっても、クラス表の1行を直すだけで済みます。

生徒表
学籍番号クラス
1001A
1003A
1002B
クラス表
クラス担任
A山田先生
B佐藤先生
正規化のメリット

重複が減る(同じ情報を何度も持たない)
更新の矛盾を防ぐ(直す場所が1か所で済む)
容量のムダが減る
つながりは外部キーで保てるので、分けても情報は失われません。

注意:分けすぎの副作用も

正規化で表を分けると、必要なデータを取り出すときに表を結合(後述)する手間が増え、検索が少し遅くなることがあります。そのため、わざと重複を残して速さを優先する設計(非正規化)が選ばれる場面もあります。ITパスポートでは「正規化=重複をなくし矛盾を防ぐ」という目的をおさえれば十分です。

- スポンサーリンク -
広告スペース

関係演算(選択・射影・結合)

表から欲しいデータを取り出す操作を関係演算といいます。代表的な3つをおさえましょう。「行を取り出す/列を取り出す/表をつなぐ」と整理すると覚えやすいです。

演算取り出すものイメージ
選択(せんたく)を取り出す条件に合う行だけを抜き出す(例:クラスAの生徒だけ)。横方向の絞り込み。
射影(しゃえい)を取り出す必要な列だけを抜き出す(例:氏名と電話番号だけ)。縦方向の絞り込み。
結合(けつごう)複数の表をつなぐ共通の列(例:学籍番号)をかぎに、2つの表を1つに合わせる。
たとえ話:選択は「行カット」、射影は「列カット」

大きな表をハサミで切るイメージです。選択は横にスパッと切って必要なだけ残す。射影は縦にスパッと切って必要なだけ残す。結合は、分けておいた「生徒表」と「成績表」を学籍番号でくっつけて、1枚の見やすい表に戻す作業です。

SQLのイメージ

関係データベースを操作するための言語がSQL(エスキューエル)です。中でもSELECT文は、表からデータを検索・抽出・並べ替えする命令で、いちばんよく使われます。細かい文法を暗記する必要はありませんが、ざっくりした形と役割をイメージしておきましょう。

キーワード役割
SELECT 列名取り出すを指定する(=射影に対応)
FROM 表名どのから取り出すかを指定する
WHERE 条件条件に合う行だけに絞る(=選択に対応)
ORDER BY 列名結果を並べ替える(昇順・降順)
具体例:SELECTの読み方

SELECT 氏名, 電話番号 FROM 生徒 WHERE クラス = 'A'
これは「生徒表(FROM)から、クラスがAの行だけ(WHERE=選択)を取り出し、その氏名と電話番号(SELECT=射影)を表示せよ」という意味。最後に ORDER BY 氏名 をつければ、氏名の順に並べ替えられます。

トランザクションとACID特性

トランザクションとは、「これ以上分けられない、ひとまとまりの一連の処理」のことです。たとえば銀行振込は「Aさんの口座から1万円減らす」と「Bさんの口座に1万円増やす」の2つで1セット。片方だけ成功して片方が失敗したら、お金が消えたり増えたりして大変です。だから「全部成功」か「全部なかったこと」にする必要があります。

このトランザクションが守るべき4つの性質を、頭文字をとってACID(アシッド)特性といいます。試験頻出です。

頭文字特性(日本語)意味
A原子性(Atomicity)処理は「全部実行」か「全部取り消し」のどちらか。中途半端を許さない。
C一貫性(Consistency)処理の前後で、データの矛盾やルール違反が起きない。
I独立性/隔離性(Isolation)同時に動く複数の処理が、互いにじゃまをしない(途中経過が見えない)。
D耐久性(Durability)正常に完了した結果は、障害が起きても失われず残る。
コミットとロールバック

コミット(commit):トランザクションを正常に確定して、変更を本当に反映すること。
ロールバック(rollback):途中で失敗したとき、変更を取り消して元の状態に戻すこと。
原子性(A)は、この「コミットかロールバックか」で守られています。

たとえ話:振込はワンセット

振込の途中で停電しても、「Aから減らした」だけで終わらせてはいけません。DBMSはロールバックで振込前に巻き戻し、なかったことにします。逆に両方ぶじ終わればコミットして確定。だからお金が消えも増えもしないのです。

排他制御(ロックとデッドロック)

大勢が同時に同じデータを書き換えると、結果がおかしくなることがあります。これを防ぐのが排他制御(同時実行制御)で、その代表的な方法がロックです。

注意:デッドロック

デッドロックとは、2つの処理が互いに相手が持つデータのロック解除を待ち続け、どちらも動けなくなる状態です。AさんはデータXを確保してYを待ち、BさんはYを確保してXを待つ――こうなると永遠に進みません。DBMSはこれを検知して、片方の処理を強制的にロールバックして解消します。

障害回復(ログ・バックアップ)

停電・故障・操作ミスでデータが壊れても、DBMSは元に戻せるしくみを持っています。かなめになるのが、変更の履歴を記録したログ(ジャーナル)と、定期的に丸ごと保存しておくバックアップです。

方法どんなときやること
ロールバック処理が途中で失敗したログを使い、変更を前に戻して取り消す。
ロールフォワード媒体(ディスク)が壊れたバックアップを復元し、ログを使ってその後の更新をやり直す(前に進める)
方向で覚える

ロールバック後ろに戻す(失敗した処理を取り消す)。
ロールフォワードに進める(バックアップ+ログで最新状態まで復旧)。
「バック=戻る/フォワード=進む」と方向で結びつけると混同しません。

分散データベースとNoSQLのさわり

最後に、発展的なキーワードを軽く押さえておきましょう。

具体例:使い分けのイメージ

銀行の口座のように厳密な整合性が命のデータは、ACIDをきっちり守る関係データベースが向いています。一方、SNSの「いいね」数や閲覧ログのようにとにかく大量で速さが大事なデータは、NoSQLが選ばれやすいです。目的に合わせて使い分けます。

✏️ 確認テスト(全7問)

〇か×で答えてみましょう。ボタンを押すと答えと解説が出ます。

Q1. 関係データベースでは、1件分のデータを「行(レコード)」、項目の種類を「列(フィールド)」と呼ぶ。

正解は 。横の1行がレコード(組)、縦の1列がフィールド(属性)です。表=テーブルとあわせて覚えましょう。

Q2. 主キーには、値が空欄(NULL)でも構わない。

正解は ×。主キーは一意・重複不可・NULL不可。空欄では行を特定できないため、NULLは認められません。

Q3. 外部キーは、別の表の主キーを参照する列である。

正解は 。外部キーは表どうしをつなぐ列で、参照先(主キー)に存在しない値は入れられません(参照整合性)。

Q4. 正規化の主な目的は、データの重複をなくし、更新時の矛盾を防ぐことである。

正解は 。表を適切に分けて重複を減らし、直す場所を1か所にすることで不整合を防ぎます。

Q5. 関係演算の「射影」は、条件に合う行を取り出す操作である。

正解は ×。条件に合うを取り出すのは「選択」です。「射影」は必要なを取り出す操作です。

Q6. ACID特性の「原子性」とは、処理が全部実行されるか、全部取り消されるかのどちらかになる性質である。

正解は 。原子性(Atomicity)は「全部か無か」。これはコミット/ロールバックによって守られます。

Q7. ディスクが壊れたとき、バックアップとログで最新状態まで復旧する操作を「ロールバック」という。

正解は ×。それはロールフォワード(前に進める)です。ロールバックは失敗した処理を元に戻す操作です。

📝 一問一答(全8問)

Q1. データベースを管理する専用ソフトを何という?
A. DBMS(データベース管理システム)。検索・更新のほか、同時実行制御・機密保護・障害回復などを担います。
Q2. 主キーが満たすべき3つの条件は?
A. 一意(重複しない)・重複不可・NULL不可(空欄禁止)。これにより1行を確実に特定できます。
Q3. 別の表の主キーを参照する列を何という?
A. 外部キー。表どうしをつなぎ、参照先に存在する値しか入れられません(参照整合性)。
Q4. データベース設計で、実体(エンティティ)と関連を表す図は?
A. E-R図(実体関連図)。実体・関連・属性で、データの構造を整理します。
Q5. 必要な「列」だけを取り出す関係演算は?
A. 射影。なお、条件に合う「行」を取り出すのは選択、表をつなぐのは結合です。
Q6. SQLで、表からデータを検索・抽出するときに使う代表的な命令は?
A. SELECT文。WHEREで条件指定(選択)、ORDER BYで並べ替えができます。
Q7. 互いに相手のロック解除を待ち続け、どちらも進めなくなる状態は?
A. デッドロック。DBMSが検知し、片方をロールバックして解消します。
Q8. 関係データベース以外の方式の総称で、大量・多様なデータを高速に扱うのが得意なものは?
A. NoSQL。キー・バリュー型やドキュメント型などがあります。

このレッスンのまとめ

今日の要点

・関係データベースは表(テーブル)の集まり。行=レコード/列=フィールド(属性)
主キーは一意・重複不可・NULL不可。外部キーは別表の主キーを参照する。
正規化は表を分けて重複をなくし、更新の矛盾を防ぐ。設計図はE-R図
・関係演算は選択(行)・射影(列)・結合(つなぐ)。SQLのSELECTで検索・並べ替え。
トランザクションは一連の処理。ACID特性を守り、コミット/ロールバックで確定・取消。
ロックで排他制御(デッドロックに注意)。障害回復はロールバック/ロールフォワード

データの「整理(表・キー・正規化)」と「安全(トランザクション・回復)」の両方がつかめれば、データベースは合格レベルです。次はそのデータをやり取りするネットワークへ進みましょう。