【Day29】データベース設計

投稿者: | 2025年8月27日

データベース設計は、コンピュータの中で情報を整理して、
「だれでも効率よく、間違えずに使えるようにする」ための設計作業です。


1. データベース設計の流れ

  1. 要求分析
    • どんなデータが必要か?
    • 誰が、どんな操作をするのか?を整理。
    • 例:図書館なら「本」「利用者」「貸出履歴」が必要。
  2. 概念設計(ER図)
    • 実体(エンティティ)と関係(リレーションシップ)を図にする。
    • 例:「利用者」―「借りる」―「本」 という関係を描く。
  3. 論理設計
    • 表(テーブル)に落とし込む。
    • 例:「利用者表」「本表」「貸出表」。
  4. 正規化
    • データの重複や矛盾をなくす整理。
    • 例:「利用者の住所」を毎回「貸出表」に書いたら無駄!→「利用者表」にまとめる。
  5. 物理設計
    • 実際にデータベース(RDBMS: Oracle, MySQL, PostgreSQLなど)にどう作るかを決める。
    • インデックスやアクセス効率も考える。

2. 信頼性の工夫

  • 主キー(Primary Key)
    データを一意に識別するためのキー。例:学生番号。
  • 参照整合性
    存在しない「学生番号」が「成績表」に書かれないように制御。

3. 外部キーとは?

  • ある表(テーブル)の列が、別の表の主キーを参照しているもの を外部キーといいます。
  • データベースでは、複数の表をつないで正しくデータを扱うために重要な役割を持っています。

🌰 具体例(生徒とクラス)

  • 生徒テーブル
    | 生徒ID (主キー) | 名前 | クラスID (外部キー) |
    |—————–|——–|——————-|
    | 1 | 太郎 | A1 |
    | 2 | 花子 | A2 |
    | 3 | 次郎 | A1 |
  • クラステーブル
    | クラスID (主キー) | クラス名 |
    |——————-|————|
    | A1 | 1年1組 |
    | A2 | 1年2組 |

👉 このとき、生徒テーブルの「クラスID」は、クラステーブルの「クラスID」を参照しています。
これが 外部キー です。


🔹 外部キーを使う意味

  1. データの整合性を保つ
    例:存在しないクラスID(A3など)を生徒テーブルに入れようとするとエラーになる。
  2. 表をつないで使える(リレーションシップ)
    例:生徒テーブルとクラステーブルを結合して「太郎は1年1組」と調べられる。

📝 基本情報技術者試験(過去問例)

【過去問1】
リレーショナルデータベースにおいて、外部キーに関する説明として適切なものはどれか。

  1. その表の行を一意に識別する。
  2. 参照先の主キーと対応しており、整合性を保証する。
  3. 表内の列の値が NULL にならないようにする。
  4. データ検索の高速化を目的とする。

👉 正解:2


【過去問2】(平成29年春 午前)

データベース設計において、正規化の目的はどれか。

A. データの検索を高速化するため
B. データの重複や矛盾をなくすため
C. データの暗号化を行うため
D. データベースを分散化するため

👉 解答:B


【過去問3】(令和3年秋 午前)

リレーショナルデータベースにおける主キーの説明として正しいものはどれか。

A. 表の行を一意に識別するための列
B. 表と表を結合するための列
C. 更新を高速化するための列
D. 暗号化に利用する列

👉 解答:A


【過去問4】(平成30年秋 午前)

「学生表(学籍番号, 氏名, 所属学科, 学科主任)」のデータを考える。
この表を正規化する理由として適切なのはどれか。

A. 学生ごとに学科主任が重複して記録されるのを避けるため
B. 学生ごとに所属学科を分割するため
C. 学生ごとに学籍番号を繰り返して記録するため
D. 学生ごとに氏名を結合するため

👉 解答:A


🎈 例えてみると

データベースは「おもちゃ箱」に例えるとわかりやすいです。

  • おもちゃ箱に「ミニカー」と「ぬいぐるみ」をゴチャゴチャに入れると、探すのが大変。
    → ちゃんと「ミニカーの箱」「ぬいぐるみの箱」に分ける(正規化)。
  • おもちゃの箱には「ラベル(名前シール)」を貼る(主キー)。
    → 「これは○○ちゃんのぬいぐるみだよ」と分かる。

こうして整理すると、みんなで使っても混乱しません。