データベース|関係データベースの表・主キーと外部キー・選択・射影・結合
ネットショッピングの商品一覧、学校の成績管理、図書館の蔵書検索。大量のデータを整理して蓄え、必要なときにすぐ取り出せるようにしたものがデータベースです。共通テストでは、表の構造を読み取り、どの操作でどんな結果が得られるかを考える問題が出ます。
データベースとDBMS
データベースは、目的に合わせて集めたデータを、検索や更新がしやすいように整理して蓄えたものです。データベースを管理するソフトウェアを DBMS(データベース管理システム)といいます。
DBMSには、主に次のような機能があります。
| 機能 | 内容 |
|---|---|
| データの検索・更新 | 条件に合うデータをすばやく取り出し、追加・変更・削除する |
| 同時実行の制御(排他制御) | 複数の人が同時に同じデータを更新しても、矛盾が起きないようにする |
| 整合性の維持 | 決められたルールに合わないデータが入らないようにする |
| 障害からの回復 | 故障が起きても、データを正しい状態に戻せるようにする |
| アクセス制御 | 利用者ごとに、見られるデータや操作できる範囲を制限する |
排他制御の例: 座席予約で、2人が同時に最後の1席を予約しようとしたとき、一方の処理が終わるまでもう一方を待たせることで、同じ席が二重に予約されるのを防ぎます。
関係データベース
現在最も広く使われているのが、データを表の形で管理する**関係データベース**(リレーショナルデータベース)です。
生徒表
| 生徒番号 | 氏名 | 学年 | 部活コード |
|---|---|---|---|
| 1001 | 青木 | 1 | B01 |
| 1002 | 石田 | 2 | B02 |
| 1003 | 上野 | 1 | B01 |
| 用語 | 意味 |
|---|---|
| レコード(行) | 1件分のデータ。1人の生徒の情報 |
| フィールド(列) | データの項目。氏名、学年など |
| 主キー | レコードを一つに特定できるフィールド。値が重複せず、空にならない(この表では生徒番号) |
| 外部キー | ほかの表の主キーを参照するフィールド(この表では部活コード) |
氏名は同姓同名の人がいるかもしれないので、主キーには向きません。学籍番号や商品コードのように、重複しないことが保証された番号を主キーにします。
3つの基本操作
部活表
| 部活コード | 部活名 | 活動場所 |
|---|---|---|
| B01 | 情報部 | 情報室 |
| B02 | 写真部 | 美術室 |
| 操作 | 内容 | 例 |
|---|---|---|
| 選択 | 条件に合う行を取り出す | 生徒表から「学年が1」の行 → 青木、上野の2行 |
| 射影 | 必要な列だけを取り出す | 生徒表から「氏名」と「学年」の列だけ |
| 結合 | 共通のフィールドで、複数の表をつなげる | 生徒表と部活表を部活コードでつなげ、生徒ごとに部活名と活動場所を表示 |
結合の結果
| 生徒番号 | 氏名 | 学年 | 部活コード | 部活名 | 活動場所 |
|---|---|---|---|---|---|
| 1001 | 青木 | 1 | B01 | 情報部 | 情報室 |
| 1002 | 石田 | 2 | B02 | 写真部 | 美術室 |
| 1003 | 上野 | 1 | B01 | 情報部 | 情報室 |
「選択は行、射影は列」と覚えましょう。
表を分ける理由(正規化の考え方)
結合の結果のような1つの大きな表でデータを管理すると、情報部の活動場所が、情報部の生徒の数だけ何度も書かれることになります。
- 活動場所が変わったとき、すべての行を書き換えなければならない
- 一部の行だけ書き換え忘れると、データに矛盾が生じる
そこで、部活の情報は部活表に一度だけ書き、生徒表には部活コードだけを持たせます。このように、データの重複をなくすように表を分けることを正規化といいます。必要なときは、結合すれば元の大きな表が得られます。
関係データベース以外のデータベース
| 種類 | 特徴 | 使われる場面 |
|---|---|---|
| キー・バリュー型 | 「キー」と「値」の組で、単純なデータを高速に読み書きする | Webサービスのセッション管理、ショッピングカート |
| ドキュメント型 | 形式の決まっていないデータを、まとまり(文書)ごとに保存する | SNSの投稿、商品ごとに項目が違うカタログ |
これらは NoSQL と呼ばれ、表の形に収まりにくい大量のデータ(ビッグデータ)を扱うのに向いています。
共通テストでの出題
- 2025年の本試験 第2問A:スーパーのレシートの項目(店コード、商品コード、購入した個数など)と、ポイントカードの会員情報を組み合わせて、どんな分析ができるかを考える問題。どのデータをどのキーで結び付ければ目的の情報が得られるか、というデータベースの考え方が使われています(「2025年 第2問 解説」)。
- 操作の名前:選択・射影・結合のどれにあたるかを問う問題。
- 主キーの判断:表の中で主キーにふさわしいフィールドを選ぶ問題。
よくある間違い
- 選択と射影の混同:選択は行(レコード)を、射影は列(フィールド)を取り出す操作です。
- 「氏名を主キーにする」:同姓同名がありうるので、主キーには重複しない番号を使います。
- 「表は1つにまとめた方が便利」:重複が増えて、更新したときに矛盾が起きやすくなります。
まとめ
- データベースはDBMSで管理し、排他制御などでデータの矛盾を防ぐ
- 関係データベースは表で管理する。行がレコード、列がフィールド
- 主キーはレコードを一つに特定するフィールド、外部キーはほかの表の主キーを参照するフィールド
- 選択は行、射影は列を取り出し、結合は共通のフィールドで表をつなぐ