データベース設計の基本|正規化とER図の書き方

はじめに:「とりあえず、Excelに全部、突っ込んでおこう」…その“思考停止”が、あなたの“未来”の、プロジェクトを“破壊”する

「顧客情報も、商品情報も、注文履歴も、ぜんぶ、この一つの、巨大なExcelシートで、管理すれば、一覧できて、便利じゃないか?」

プログラミングのリスキリングを、始めたばかりの、あなた。
あるいは、DXの、掛け声のもと、現場の業務を、デジタル化しようとしている、あなた。
ついつい、このような「巨大な、万能Excelシート」を、作ってしまってはいないでしょうか。

しかし、その「便利さ」は、データの量が、少ない、初期段階だけの、脆い「幻想」です。
その、無秩序な「データの、泥団子」は、あなたの、ビジネスが成長するにつれて、必ず、手に負えない「怪物」へと、変貌し、あなたの、未来のプロジェクトを、内側から、食い潰していく、時限爆弾となるのです。

この記事は、「データベースの、重要性は分かるが、どう設計すれば良いか、分からない」「『正規化』や『ER図』という、専門用語に、アレルギーがある」と悩む、すべての、意欲的な、ビジネスパーソンと、未来の、エンジニアのために書かれました。

本稿では、この、一見、地味で、難解に見える「データベース設計」の世界について、その、なぜ、それが必要なのか、という本質的な、問いから、具体的な「設計プロセス」までを、一つの「ストーリー」として、体系的に解き明かしていきます。

この記事を読み終える頃には、あなたは以下のものを手にしているはずです。

  • なぜ、杜撰なデータベース設計が「技術的負債」の、最大の源泉と、呼ばれるのか
  • データの「無駄」と「矛盾」を、根絶する、魔法の整理術「正規化」の、具体的なステップ
  • データベースの「設計図」である「ER図」を、自信を持って、読み、書けるようになる
  • そして、この「データの、構造を、デザインするスキル」が、あなたの市場価値を高める最高のスキルアップとなり、未来のキャリアアップや、有利な転職に、どう繋がるかという、明確なビジョン

データベース設計は、単なる、技術者のための、専門知識では、ありません。
それは、現実世界の、複雑な「情報」を、いかにして、美しく、そして、論理的に「整理整頓」するか、という、全ての、知的生産活動の、土台となる「思考のOS」を、学ぶ、最高のリスキリングなのです。

さあ、「とりあえず、突っ込む」という、思考停止から、卒業しましょう。
10年後も、輝き続ける、堅牢で、美しい「データの、建築様式」を、学ぶ旅が、今、ここから始まります。


1.【なぜ“設計”は、必要なのか?】“巨大Excel”が、必ず、引き起こす「3つの、悲劇」

優れた、データベース設計の、価値を、深く理解するためには、まず、設計なき、データベース(あるいは、巨大なExcelシート)が、将来、どのような「悲劇」を、引き起こすのか、その、具体的な「痛み」を、知ることから始めましょう。

ここでは、ある、小さなオンラインストアの「注文管理Excelシート」を、例に、その、構造的な、欠陥を、解剖していきます。

【図1:悪夢の、注文管理Excelシート】

注文ID注文日顧客ID顧客名顧客住所顧客電話番号商品ID商品名単価数量合計金額
0019/27C101山田 太郎東京都…090-…P01A bút1002200
0019/27C101山田 太郎東京都…090-…P05C消しゴム50150
0029/28C205鈴木 花子大阪府…080-…P01A bút1005500

一見、このシートは、全ての情報が、一覧できて「便利」なように、思えるかもしれません。
しかし、この、一見「便利」な、構造こそが、データの「整合性」を、破壊する、3つの、致命的な「異常(アノマリー)」の、温床なのです。

1-1. 悲劇①:更新異常 (Update Anomaly)|“たった一つの、修正”が、“悪夢の、始まり”

  • もし、顧客の「山田太郎」さんが、引っ越しをしたら…?
    • あなたは、彼の、新しい住所を、このシートに、反映させなければなりません。
    • しかし、山田さんの、顧客情報は、彼が、商品を注文した「全ての行」に、重複して、記録されています。
    • もし、山田さんが、過去に100回、注文をしていたら、あなたは、100箇所の「顧客住所」のセルを、一つひとつ、手作業で、修正していかなければなりません。
  • 何が、起きるか?
    • ① 膨大な、修正コスト:
      • 単純な、住所変更という、一つのイベントに対して、あまりにも、多くの、作業が、発生します。
    • ② データの、不整合:
      • 人間が、手作業で、100箇所も修正すれば、必ず「修正漏れ」が、発生します。
      • その結果、このシートの中には「旧住所の、山田太郎さん」「新住所の、山田太郎さん」という、2人の、山田太郎さんが、同居する、という、データの「矛盾(不整合)」が、生まれてしまうのです。
      • どちらの、情報が「正しい」のか、もはや、誰にも、判断できません。

1-2. 悲劇②:挿入異常 (Insertion Anomaly)|“まだ、買わない客”は、“存在しない”のか?

  • もし、まだ一度も、注文をしたことがない「新規の、見込み顧客」の、情報を、登録したくなったら…?
    • このシートの、構造では、それは「不可能」です。
    • なぜなら、このシートは「注文」が、発生して、初めて、一行のデータ(レコード)が、作られる、という、「注文」に、強く依存した構造になっているからです。
  • 何が、起きるか?
    • 「注文をしていない、顧客は、そもそも、登録できない」という、極めて、不便で、非論理的な、制約が、生まれてしまいます。
    • Webマーケティングの、観点から、見込み顧客のリスト(ハウスリスト)を、管理したい、という、ビジネス上の、当然の要求に、応えることができません。

1-3. 悲劇③:削除異常 (Deletion Anomaly)|“最後の一つの、注文”が、顧客の“存在”を、消し去る

  • もし、顧客の「鈴木花子」さんが、唯一の注文(注文ID: 002)を、キャンセルしたとしたら…?
    • あなたは、注文ID「002」の行を、削除します。
  • 何が、起きるか?
    • その瞬間、「鈴木花子」さんという、顧客が、かつて、存在した、という「事実」そのものが、このシートから、完全に、消え去ってしまいます。
    • 注文情報を、削除した、つもりが、意図せずして、それに付随する、貴重な「顧客情報」まで、一緒に、削除してしまう。
    • これが、削除異常です。

1-4. 根本原因は「データの、重複(冗長性)」

これらの、3つの悲劇を、引き起こしている、たった一つの、根本原因。
それは「一つの、テーブルに、異なる、テーマの情報を、ごちゃ混ぜに、詰め込んでいる」ことによる「データの、重複(冗”長性 / Redundancy)」です。

この、無秩序な「情報の、泥団子」を、論理的で、美しい「構造」へと、整理整頓し、これらの「異常」を、原理的に、発生させないようにするための、科学的な、手順。
それこそが、次章で解説する「正規化」なのです。


2.【“正規化”という、魔法の整理術】“データの、泥団子”を、“宝石”へと、磨き上げる

正規化(Normalization)とは、リレーショナルデータベースの、設計において、データの「冗長性」を、排除し、「一貫性」を、維持するために、テーブルを、適切に「分割」していく、一連の、プロセスのことです。
ここでは、最も重要とされる「第1正規形」から「第3正規形」までの、ステップを、先ほどの「悪夢の、注文管理Excelシート」を、題材に、見ていきましょう。

2-1. 第1正規形 (1NF – First Normal Form):一つの“セル”には、一つの“値”

  • 定義:
    • テーブルの、一つのセル(フィールド)の中には、一つの「値(スカラ値)」しか、含んではならない。
    • 繰り返しの、グループを、持ってはならない。
  • どういうことか?(Before)
    • 先ほどの、Excelシートでは、一つの「注文」で、複数の商品が、購入された場合、商品を、管理するために、行を、コピー&ペーストしていました。
    • これが「繰り返しの、グループ」です。
  • なぜ、問題か?
    • 顧客情報(氏名、住所など)が、注文した商品の、数だけ、無駄に「重複」してしまっています。
  • どう、解決するか?(After)
    • この段階では、まず、繰り返しを、なくし、全ての行が、一つの「注文明細」を、表すように、データを、整理します。
    • 主キーとして「注文ID」と「商品ID」の、組み合わせを、設定します。

【図2:第1正規化後のテーブル】

注文ID商品ID注文日顧客ID顧客名顧客住所商品名単価数量
001P019/27C101山田 太郎東京都…A bút1002
001P059/27C101山田 太郎東京都…C消しゴム501
002P019/28C205鈴木 花子大阪府…A bút1005

2-2. 第2正規形 (2NF – Second Normal Form):“主キー”の、一部だけに、依存するな

  • 定義:
    • 第1正規形であり、かつ、主キー以外の、全てのカラムが、主キーの「全体」に、完全に関数従属している。
    • (分かりやすく言えば、複合主キーの、一部だけに、依存しているカラムが、存在してはならない
  • どういうことか?(Before)
    • 【図2】のテーブルの、主キーは「注文ID」と「商品ID」の、組み合わせです。
    • しかし、カラムを、よく見てみると…
      • 「注文日」「顧客ID」「顧客名」「顧客住所」は、「注文ID」さえ決まれば、決まる情報であり、「商品ID」には、依存していません
      • 「商品名」「単価」は、「商品ID」さえ決まれば、決まる情報であり、「注文ID」には、依存していません
    • このように、主キーの「一部」だけに、依存している状態を「部分関数従属」と呼びます。
  • なぜ、問題か?
    • これもまた「データの、重複」の、温床です。
    • 例えば、商品ID「P01」の「Aペン」が、1000回、注文されたら、そのたびに「Aペン」「100円」という、同じ情報が、1000回、繰り返し記録されます。
    • もし「Aペン」が、120円に、値上がりしたら、1000箇所の、単価を、修正しなければなりません(更新異常)。
  • どう、解決するか?(After):「テーブルの、分割」
    • 部分関数従属している、カラムを、別のテーブルへと、切り出す。
    • 【図2】は、「注文」というテーマ、「商品」というテーマ、そして、両者を、結びつける「注文明細」というテーマが、混在しています。
    • これらを、それぞれのテーマごとに、3つのテーブルへと、分割します。

【図3-1:注文テーブル】 (主キー: 注文ID)

注文ID注文日顧客ID
0019/27C101
0029/28C205

【図3-2:商品マスタテーブル】 (主キー: 商品ID)

商品ID商品名単価
P01A bút100
P05C消しゴム50

【図3-3:注文明細テーブル】 (主キー: 注文ID+商品ID)

注文ID商品ID数量
001P012
001P051
002P015

2-3. 第3正規形 (3NF – Third Normal Form):“主キー以外”の、カラムに、依存するな

  • 定義:
    • 第2正規形であり、かつ、主キー以外の、カラムの間で、関数従属(推移的関数従属)が存在しない
  • どういうことか?(Before)
    • 【図3-1】の「注文テーブル」に、もし「顧客名」というカラムを、追加したとします。
    • この「顧客名」は、主キーである「注文ID」から、直接決まるものでは、ありません
    • 「注文ID」→「顧客ID」→「顧客名」というように、主キー以外の「顧客ID」というカラムを、経由して、間接的に、決まっています。
    • これを「推移的関数従属」と呼びます。
  • なぜ、問題か?
    • これもまた「データの、重複」です。顧客ID「C101」の「山田太郎」さんが、100回注文すれば、「山田太郎」という名前が、100回、注文テーブルに、記録されます。
  • どう、解決するか?(After):さらなる「テーブルの、分割」
    • 推移的関数従属している、カラムを、別のテーブルへと、切り出す。
    • 「顧客」という、テーマを、独立した「顧客マスタテーブル」として、切り出します。

【最終形:第3正規化された、テーブル群】

  • 顧客マスタテーブル: 顧客ID (PK), 顧客名, 住所
  • 商品マスタテーブル: 商品ID (PK), 商品名, 単価
  • 注文テーブル: 注文ID (PK), 注文日, 顧客ID (FK)
  • 注文明細テーブル: 注文明細ID (PK), 注文ID (FK), 商品ID (FK), 数量

この、美しく、正規化された構造
データの重複は、完全に排除され、更新・挿入・削除の、全てのアノマリーは、解決されました。
この「正規化」という、思考のプロセスを、学ぶことこそが、あなたの、データ設計能力を、プロのレベルへと引き上げる、最も重要なリスキリングなのです。


3.【ER図の、書き方】“データの、建築設計図”を、マスターするスキルアップ

正規化によって、論理的に、整理された、テーブル群。
しかし、それらの「テーブル」と、テーブル間の「関係性」が、ただのリストとして、存在するだけでは、システム全体の、構造を、一目で、把握することは、困難です。
この、データベースの、全体像を、視覚的に、分かりやすく表現するための「設計図」。
それが「ER図(Entity-Relationship Diagram)」です。

3-1. ER図の、3つの“基本部品”

ER図は、主に3つの、シンプルな「部品」で、構成されています。

  • ① エンティティ (Entity):データの“主役”となる「モノ」や「コト」
    • 役割:
      • システムが、管理すべき、主要な「名詞」
    • アナロジー:「物語の、登場人物」
    • ER図での、表現:
      • 四角い箱で、表現される。
    • 例:
      • 「顧客」「商品」「注文」
  • ② アトリビュート (Attribute):エンティティの“詳細情報”
    • 役割:
      • エンティティが、持つ、具体的な「属性」や「データ項目」
    • アナロジー:「登場人物の、プロフィール(名前、年齢、職業など)」
    • ER図での、表現:
      • エンティティの、箱の中に、リストとして、記述される。
    • 例:
      • 「顧客」エンティティの、アトリビュート:顧客ID, 氏名, 住所, 電話番号
  • ③ リレーションシップ (Relationship):エンティティ間の“関係性”
    • 役割:
      • エンティティと、エンティティを、結びつける「動詞」
    • アナロジー:「登場人物たちの、相関図」
    • ER図での、表現:
      • エンティティの、箱と箱を、結ぶ「線」で、表現される。
    • 例:
      • 「顧客」は、「注文」「行う」
      • 「注文」には、複数の「注文明細」「含まれる」

3-2. 関係性の“ルール”を、定義する「カーディナリティ」

リレーションシップの「線」には、エンティティ間の、量的な関係性を示す「カーディナリティ(多重度)」という、重要な「記号」が、付け加えられます。

  • 主な、カーディナリティ:
    • ① 1対1 (One-to-One):
      • エンティティAの、1つのレコードが、エンティティBの、1つのレコードとだけ、対応する。
      • (例:「社員」と「社員詳細情報」)
    • ② 1対多 (One-to-Many):
      • 最も、一般的な、関係性。
      • エンティティAの、1つのレコードが、エンティティBの、複数のレコードと、対応する。
      • (例:一人の「顧客」は、複数の「注文」を、行う)
    • ③ 多対多 (Many-to-Many):
      • エンティティAの、複数のレコードが、エンティティBの、複数のレコードと、対応する。
      • (例:一人の「学生」は、複数の「授業」を、履修し、一つの「授業」には、複数の「学生」が、所属する)
  • ER図での、表現(IE記法の場合):
    • | :1
    • O :0
    • 鳥の足のような記号 :多
  • 「多対多」の、解消:
    • リレーショナルデータベースでは、「多対多」の、関係を、直接、表現することはできません
    • そのような場合は、「中間テーブル(連関エンティティ)」を、間に挟むことで、2つの「1対多」の、関係に、分解します。
    • (例:「学生」と「授業」の間に「履修登録」という、中間テーブルを、作る)

3-3.【実践】「注文管理システム」の、ER図を、描いてみよう

前章で、正規化した、4つのテーブルを、元に、ER図を、描いてみましょう。

  1. STEP1:エンティティを、洗い出す
    • 「顧客」「商品」「注文」「注文明細」
  2. STEP2:各エンティティの、アトリビュートを、定義する
  3. STEP3:エンティティ間の、リレーションシップと、カーディナリティを、定義する
    • 「顧客」と「注文」 → 一人の顧客は、〇個以上の注文を、行う(1対多)
    • 「注文」と「注文明細」 → 一つの注文は、一個以上の注文明細を、持つ(1対多)
    • 「商品」と「注文明細」 → 一つの商品は、〇個以上の注文明細に、含まれる(1対多)

この、ER図を、描く、というスキルアップ
それは、ビジネスの、要求を、データという、論理的な「構造」へと、翻訳する、高度な「モデリング能力」を、鍛える、最高のトレーニングです。
この能力は、あなたのキャリアアップと、アーキテクトへの転職において、不可欠な、武器となります。


4. まとめ:「美しい、データ」が、「美しい、アプリケーション」を、生む

本記事では、全ての、堅牢なソフトウェアの、土台となる「データベース設計」について、その、核心的な思想である「正規化」と、視覚的な設計図である「ER図」の、書き方を、体系的に、解説してきました。

多くの、プログラミング初学者は、目に見える「アプリケーションの、機能」を、実装することに、夢中になるあまり、その、アプリケーションの、振る舞いを、陰で支える、目に見えない「データの、構造」の、重要性を、見過ごしてしまいがちです。

しかし、家の、価値が、その「基礎工事」の、質に、左右されるように。
アプリケーションの、長期的な「価値」と「寿命」は、その、土台となる「データベース設計」の、美しさと、堅牢性に、完全に、依存しているのです。

  • 正規化は、あなたの「データ」から、無駄と、矛盾を、取り除き、「真実」だけを、残す、知的な“濾過装置”である。
  • ER図は、あなたの「思考」に、複雑な、現実を、シンプルに、表現する「構造」を、与える、魔法の“設計図”である。
  • そして、この「情報の、建築術」を、学ぶリスキリングの、経験こそが、あなたを、単なる「実装者」から、システムの、未来に、責任を持つ「設計者」へと、進化させる、最高のスキルアップであり、キャリアアップの、道筋なのだ。

この、データモデリングの、能力は、Webエンジニアだけでなく、データアナリスト、データサイエンティスト、そして、Webマーケティングの、担当者が、CDP(カスタマーデータプラットフォーム)などを、設計・活用する上でも、極めて重要な、スキルとなります。
この、本質的なスキルは、あなたの転職市場における、価値を、飛躍的に高めるでしょう。

さあ、あなたが、次に、向き合う、ビジネスの課題。
その、混沌とした、情報の塊の、中に、どのような「エンティティ」と「リレーションシップ」が、隠されているでしょうか。
その、見えない「構造」を、見抜く、新しい「眼」を、手に入れる旅を、今日から、始めてみませんか?
その、先に、あなたの、エンジニアとしての、新しい地平線が、広がっています。

リスキリングおすすめ記事

キャリアおすすめ記事

最近の記事
おすすめ記事
ピックアップ記事
おすすめ記事
アーカイブ
PAGE TOP