データベース設計|E-R図・主キー・外部キー・正規化【ITパスポート】

ITパスポート試験

ITパスポート 第4部 デジタル技術17-2 データベース設計最終更新 2026-10-18

データベース設計は、業務で使うデータを洗い出して関連を整理し、同じ事実を1か所にだけ書く表の組み合わせに落とす作業です。

データ分析から始める

表を作る前に、まず業務の中身を調べます。図書館の貸出なら、だれが(会員)、どの本を(本)、いつ借りたか(貸出日)というデータ項目を洗い出し、 「会員が本を借りる」のような項目どうしの関連を整理します。 必要なデータ項目を洗い出し、項目間の関連を整理する作業をデータ分析といいます。

データベース設計の流れ。4枚のカードが左から右へ矢印でつながる。1 データ分析:必要なデータ項目を洗い出し、項目間の関連を整理する。2 E-R図:エンティティとリレーションシップで表す。3 表を決める:主キーと外部キーを決める。4 正規化:重複をなくして表を分ける。

まず業務のデータを洗い出して関連を整理し、図にしてから表に落とします。

洗い出すときは、同じものの呼び方をそろえることも大事です。「会員番号」と「利用者ID」が同じ項目を指しているなら、名前をどちらか一方にそろえます。 データの中身も同じで、「(株)」と「株式会社」が混ざっていたり、入力の誤りが残っていたりすると、あとで正しく集計できません。 こうしたデータの値の表記の揺れや誤りを直してそろえる作業をデータクレンジングといいます。

データ分析と紛らわしい作業を1文ずつ。データウェアハウス(大量のデータをためた倉庫)から業務ごとに要る情報を取り出すのは、すでにできたデータの活用です。 表から条件に合う行だけを取り出すのは関係演算の選択で、できた表への操作です。 膨大なデータから統計的な手法などでビジネスに使える規則を探すのはデータマイニングです。 どれも表を作ったあとの話で、表を作る前に項目と関連を整理するデータ分析とは別物です。

E-R図 ── エンティティとリレーションシップ

整理した結果はE-R図に描きます。E はエンティティ(実体)、R はリレーションシップ(関連)です。

E-R図の部品

エンティティ … データとして管理したい「もの」や「できごと」。会員・本・貸出など。箱で描き、中に会員番号・会員名のような項目(属性)を並べる

リレーションシップ … エンティティどうしのつながり。「会員が本を借りる」など。箱と箱を結ぶ線で描く

1対多 … 線の両端に付ける数。1人の会員は何度も借りるが、1件の貸出の借り手は1人だけ。だから会員の側が「1」、貸出の側が「多」

E-R図の例(図書館の貸出)。左に「会員」(会員番号・会員名)、中央に「貸出」(貸出番号・貸出日・返却予定日)、右に「本」(本番号・書名)の3つの箱。会員と貸出は「借りる」という線で結ばれ、会員の側に1、貸出の側に多。貸出と本は「貸し出される」という線で結ばれ、貸出の側に多、本の側に1。箱がエンティティ(実体)、線がリレーションシップ(関連)。

箱がエンティティ、線がリレーションシップ。線の両端の「1」と「多」が、相手といくつ対応するかを表します。

E-R図は、データを「もの(エンティティ)」と「つながり(リレーションシップ)」で表した設計図です。 この段階ではまだ表の形を決めていません。どの箱が1つの表になり、線がどの項目で結ばれるかを、次の主キーと外部キーで決めます。

主キーと外部キー

関係データベースでは、データを行と列からなる表(テーブル)に入れます。1行が1件のデータ(レコード)、1列が1つの項目(フィールド)です。 表の中の行を1つに特定するための項目を主キーといいます。会員の表なら会員番号です。 同じ名前の会員がいても、会員番号が違えば別の人だと分かります。

主キーの決まり

重複しない … ほかの行と同じ値になる項目は主キーにできない。会員名は同姓同名がありうるので主キーに向かない

空にしない … 主キーの値が空(未入力)の行は作れない。空では行を特定できない

複数の項目の組でもよい … 1つの項目では決まらないとき、2つ以上の項目を組にして主キーにできる

数値でなくてよい … 「M01」「B07」のような文字を含む番号でもよい。決め手は値が重ならないこと

組の主キーは、番号の振り方で決まります。学校で出席番号がクラスごとに1番から振られるなら、出席番号だけでは生徒が1人に決まりません。 1組の5番と2組の5番がいるからです。このときは「クラス」と「出席番号」の組を主キーにします。 反対に、1つの項目だけで行がただ1つに決まるなら、ほかの項目を足して組にはしません。主キーは、行を決めるのに必要な最小限の項目で作ります。 主キーは、その値(または値の組)で行がただ1つに決まる項目です。

表を分けると、表どうしを結ぶ項目が要ります。貸出の表に会員番号を入れておけば、そこから会員の表をたどって会員名が分かります。 このように、ほかの表の主キーを指すために持つ項目を外部キーといいます。

主キーと外部キー。左の「貸出」表は、貸出番号(主キー)・会員番号(外部キー)・貸出日の3列で、行は L001・M01・10月1日 と L002・M02・10月3日。右の「会員」表は、会員番号(主キー)・会員名の2列で、行は M01・青木 と M02・石井。貸出表の会員番号(外部キー)から、会員表の会員番号(主キー)へ矢印が伸び、「相手の表の主キーを指す」と添えてある。下に「主キー=行を1つに特定する。重複なし・空なし」。

主キーは表の中で行を1つに決める項目、外部キーはほかの表の主キーを指す項目です。

主キーとインデックスも区別します。インデックスは、本の索引のように検索を速くするための仕組みです。 主キーは行を特定する決まり、インデックスは探す速さのための仕組みで、役割が違うので、主キーの列にインデックスを付けてもかまいません。

社員の資格取得を記録する表を作ります。列は「社員番号|資格コード|取得日」です。1人の社員は複数の資格を取り、1つの資格は複数の社員が取ります。 同じ社員が同じ資格を2回登録することはありません。主キーとして最も適切なものはどれですか。

正規化 ── 同じ事実を1か所に

図書館の貸出を、1つの表「貸出記録」だけで管理していたとします。

分ける前:貸出記録

列 … 貸出番号(主キー)|貸出日|会員番号|会員名|本番号|書名

1行目 … L001|10月1日|M01|青木|B07|星の地図

2行目 … L002|10月3日|M02|石井|B07|星の地図

3行目 … L003|10月5日|M01|青木|B12|海辺の町

「M01 は青木さん」という事実が2行に、「B07 は星の地図」という事実も2行に重なっています。 青木さんが改姓して1行目だけ直し忘れると、同じ M01 なのに名前が2通りになり、どちらが正しいか分からなくなります。 データの一貫性が崩れた状態です。

そこで、表を分けて重複をなくします。これが正規化です。

正規化 ── 1つの表を分ける。左の「分ける前」は1つの表「貸出記録」で、列は貸出番号・貸出日・会員番号・会員名・本番号・書名。会員名の列に「同じ会員名が何行にも重なる」と注記。矢印「正規化」の右の「分けた後」は3つの表:会員(会員番号・会員名)、本(本番号・書名)、貸出(貸出番号・貸出日・会員番号・本番号)。下に「会員名も書名も1か所だけ」。

会員のことは会員の表に、本のことは本の表に1回だけ書き、貸出の表は番号で両方を指します。

分けた後:3つの表

会員 … 会員番号(主キー)|会員名 → M01|青木、M02|石井

本 … 本番号(主キー)|書名 → B07|星の地図、B12|海辺の町

貸出 … 貸出番号(主キー)|貸出日|会員番号(外部キー)|本番号(外部キー)

会員名は会員の表に1回だけ、書名は本の表に1回だけ書かれるので、改姓しても会員の表の1行を直せば済みます。 正規化の目的は、データの重複をなくして一貫性を保つことです。 正規化を進めると、1つの表が複数の表に分かれていきます。データを圧縮する技術ではありません。

どの項目をどの表に入れるかは、「その値は、何が決まれば1つに決まるか」で判断します。

行き先の決め方

会員名 … 会員番号が決まれば決まる → 会員の表へ

書名 … 本番号が決まれば決まる → 本の表へ

貸出日 … 同じ会員が同じ本を借りても日は毎回違う。貸出番号が決まって初めて決まる → 貸出の表へ

番号どうしのつながり … 貸出の表に会員番号と本番号を外部キーとして残す。残さないと、だれがどの本を借りたかが分からなくなる

問題文の「ただし書き」が行き先を決めます。たとえば「同じ商品でも値段が違えば商品番号も変える」とあれば、値段は商品番号で決まるので商品の表へ入れます。 一方、「何個買ったか」は商品ではなく注文ごとに変わるので、注文の表に残ります。 また、元の表の主キーが2つの項目の組だった場合(店舗ごとに1番から振る会員番号など)、その組が決まって初めて決まる項目(会員名など)を移した表では、主キーは組のまま持っていきます。 組の片方だけでは行が1つに決まらないからです。一方、店舗名のように店舗コードだけで決まる項目を移した表なら、主キーは店舗コードだけです。

レンタカー店が、予約を「予約番号|利用日|顧客番号|顧客名|車両番号|車種」の1つの表で管理しています。同じ顧客が何度も予約しています。 この表を正規化して「予約」「顧客」「車両」の3つの表に分けました。分けたことで得られる効果として最も適切なものはどれですか。

正規化とパフォーマンス

正規化で表を分けると、困ることも1つあります。画面に「貸出日・会員名・書名」を並べて出すには、貸出・会員・本の3つの表を番号で結合して組み立て直す必要があり、その分だけ処理が増えます。 正規化は一貫性のための設計で、速さは結合の手間とインデックスで調整します。 よく検索する項目にはインデックスを付けて、探す時間を短くします。

設計の順番は、まず正規化で「同じ事実は1か所」を守り、そのうえで速さが足りないところを調整する、が基本です。 なお、正規化には段階があり、FE などの上位の試験ではその手順まで問われますが、ITパスポートでは段階の名前や手順は問われません(現行シラバスに「正規化の詳細な内容は問わない」とあります)。 押さえるのはなぜ分けるのかと、分けた結果どの項目がどの表に入るかの2つです。

まとめ

この回で持ち帰ること

1. データ分析=必要なデータ項目を洗い出し、項目間の関連を整理する。表を作る前の作業。データクレンジングは表記の揺れや誤りを直してそろえること

2. E-R図=エンティティ(もの・できごと)を箱、リレーションシップ(つながり)を線で描く。線の両端に「1」「多」

3. 主キー=行をただ1つに特定する項目。重複しない・空にしない。複数の項目の組でもよく、数値でなくてもよい。インデックスと同じ列に付けてもよい

4. 外部キー=ほかの表の主キーを指す項目。表を分けても、つながりは外部キーで残す

5. 正規化=重複をなくして一貫性を保つ。進めると1つの表が複数の表に分かれる。行き先は「何が決まればその値が決まるか」で決める

6. 分けた表は結合して表示する。速さはインデックスなどで調整する

この節で解ける公開問題

令和4〜8年度の公開問題のうち、この節の知識で解ける問題は次の6問です。

この節の過去問を続けて解く(6問) →

教科書の一覧(現行の試験の順)教科書の一覧(新しい試験の順)過去問

ITパスポートのUdemy講座を口コミで比べる。動画講座3つ・問題集3つ、受講者数・★評価・口コミつき。広告を含むページですITパスポートのUdemy講座を口コミで比べる。動画講座3つ・問題集3つ、受講者数・★評価・口コミつき。広告を含むページです

Udemy の ITパスポート講座を、受講者数・★評価・口コミで比べたページです(広告を含みます)。

出典:IPA「ITパスポート試験 シラバス(案)Ver0.1」(2026年8月31日)、「ITパスポート試験 シラバス Ver6.5」、 「基本情報技術者試験 シラバス Ver9.2」(データベース設計)。 図と本文の表の例(図書館の貸出)は当サイトが説明のために作ったもので、練習問題も当サイトのオリジナルです。

タイトルとURLをコピーしました