データベース設計で重要な役割を担っているER図ですが、「いまいち理解できていない」「どこから手を付けるべきかわからない」「作成に時間がかかる」という方も多いのではないでしょうか。
そこで本記事では、ER図の基礎知識から書き方について、初心者でもわかりやすいように解説しています。
これを押さえておけば、ER図は書ける!という内容になっているので、これからER図を書く方はぜひ一度ご覧いただければと思います。
また、すぐに使えるテクニックや無料ツールについても紹介しているので、ぜひER図作成にご活用ください。
ER図の基礎知識をわかりやすく解説!
ここでは、ER図作成において必要になってくる基礎知識を図を用いながら解説していきます。
ER図とは、エンティティ・リレーションシップ図の略で、データベース設計に用いられる設計図のことです。
エンティティ=実体、リレーションシップ=関係を意味し、データの構造や関連性を表します。 例えば上図では、「社員」や「部署」がエンティティで、両者をつなぐ線「ー」がリレーションシップです。
ER図を作ることで、データの種類やデータ同士のつながりを把握しやすくなり、品質の高いデータベース構築ができるようになります。また、保守・運用の段階でも素早く改修に対応できるなど、ER図の作成はシステム開発において重要な作業です。
次にER図の表記法や、構成、書き方について紹介する前に、ER図で使われる基本的なワードについて詳しく解説していきます。
ER図で使われる基本的なワードまとめ
ここでは次の章で解説する、IE記法で作ったER図を例に、基本的なワードを紹介していきます。
- エンティティ(実体)
エンティティは、データベースで管理される対象「顧客」「注文」などを指し、1つのまとまりとして扱われます。エンティティを定義することで、データベースに格納するデータの内容や範囲が明確になります。 - アトリビュート(属性)
属性は、エンティティの特徴や詳細情報を表します。例えば、「注文」エンティティの「顧客ID」「注文日時」「配達方法」などが属性です。属性によって、エンティティの内容を具体的に記述します。 - リレーション(関係)
リレーションは、エンティティ同士の関連性を示します。例えば、「顧客」と「注文」のエンティティ間に「注文する」というリレーションが存在することで、「顧客が注文をする」という関係を表現できます。 - カーディナリティ(多重度)
カーディナリティは、リレーションで表されるエンティティ間の関連数を示し「1対1」「1対多」「多対多」などで表現されます。上図の場合は、顧客が1に対して注文が多数あることを表現しています。また、カーディナリティを定義することで、エンティティ間の関係性がより正確に理解できます。
詳しいカーディナリティの表現については、次の章で表記法とともに解説していきます。
押さえておくべきER図の表記法2つ
ER図にはいくつか種類がありますが、ここでは代表的な2つの表記法を紹介していきます。
代表的なものは以下の①IE記法、②IDEF1X記法の2つです。 それぞれ大きく違うのは、カーディナリティの表現方法です。その点についても解説していきます。
①IE記法
IE記法とは、別名鳥の足記法ともいわれる手法です。次に紹介するIDEF1X記法より、リレーションシップが直観的に理解しやすいといわれています。 下の3つの記号を覚えると、IE記法でのER図が書けるようになるので把握しておきましょう。
IE記法でのカーディナリティ表記
それぞれ、左側が記号、右側がその意味で、この場合は0、1、多(多数)をあらわしています。
IE記法でのルールに基づくと、上図では、顧客が1に対して注文が多数あることを表しています。
②IDEF1X記法
IDEF1X表記は、米国標準技術研究所が開発したER図の表記法です。IE記法と並んで一般的なER図の記述方法となっています。 IE記法との違いはカーディナリティの点にあり、IDEF1X記法では「●」や「◇」の記号や、数字、英字を使って表現するところです。
以下がIDEF1X記法で使われる記号とその意味をまとめた図表です。
上図は記号のみの解説でしたが、下図ではリレーション上に当てはめた記号の意味を説明しています。
例えば、1:1の場合は、リレーションの左部分と右部分の関係が1:1の関係であることを表しています。 上図の●Nの場合、Nの部分に数字が代入されます。その数字が、1:NのNの部分に対応します。また、●N-Mでは、N・Mそれぞれに数字が代入され、1:N以上M以下に適応されます。
次にER図が作られる3つの段階について解説します。
ER図を作成する3つの段階
ここでは簡単にER図を作成する3つの段階を紹介していきます。
データベースを設計する際には、それぞれ①概念モデル、②論理モデル、③物理モデルの3つ順番で設計を進めていきます。各段階で、異なる視点や目的に応じてデータを設計するので、それぞれの特徴について押さえておきましょう。
初めに①概念モデルについて解説していきます。ここでは、IDEF1X表記を使って紹介していきます。
概念モデルは、データベース設計の最も初期段階で作成されるもので、システムの全体像や要件に基づいてデータの構造をざっくりと定義します。データベースの実装は考慮せず、処理の大まかな流れとデータ同士のつながりの視点から、重要なデータ(エンティティ)とその関係性(リレーション)に焦点を当てて整理します。
例えば、上図のように、顧客管理システムにおける「顧客」「注文」などの主要エンティティとそれらのリレーションを定義する段階です。
論理モデルは、概念モデルをもとに技術的な視点を追加し、データベース内でどのようにデータを管理するかを設計する段階です。具体的には、エンティティに属性を追加し、エンティティ間の関係性を明確化することで、データの不整合を防ぎます。
例えば、「顧客」エンティティに「顧客ID」「顧客名」「住所」「電話番号」などの属性を定義し、「顧客」と「注文」の関係性を1対多で明示する、といった設計を行う段階です。
物理モデルは、論理モデルをもとに、特定のデータベース製品や環境に合わせた実装の詳細を設計する段階です。
具体的なテーブル構造やデータ型など、データベースを実際に構築するための詳細な仕様を記載します。物理モデルを通じて、データベースのパフォーマンスやストレージ効率、データの一貫性やセキュリティも考慮します。
また、ここで登場する、PK(Primary Key・主キー)とFK(Foreign Key・外部キー)についても解説していきます。PKとは、テーブル内において、各行を一意に特定するためキーです。FKとは、他のテーブルの主キーを参照し、テーブル間の関連性を示すためのキーです。上図の場合ではcustomerテーブルのcustomer_idと、orderテーブルのorder_idがPKである一方、orderテーブルのcustomer_idがFKとなっています。
また、「顧客ID:customer_id」を整数型(integer)で定義し、「名前:customer_name」を文字列型(varchar)で設定するなど、より具体的に設計を行っています。
これまで紹介してきたER図の基本情報をもとにするとER図を書くことができます。 次の章では、すぐ書ける!ER図の書き方を、3ステップを解説していきます。
すぐ書ける!ER図の書き方を3ステップで紹介
ここでは概念モデルの段階から、ER図の下準備や書く段階まで含めて、ER図の作成方法をわかりやすく解説していきます。
①エンティティを洗い出す
最初に、データベースをどのように使って、どのようにデータを関連付けるのかを整理するとともに、ER図のベースとなるエンティティ(実体)を見つけます。
この段階では、概念ER図がほとんど完成しているイメージです。 上図のように、顧客管理システムであれば「顧客」「注文」などをエンティティとして位置します。
各エンティティがデータベース内で独立したテーブルとして機能することを意識しながら、関連するエンティティを洗い出すことが重要です。
②エンティティの中身を決定する
次に、各エンティティに対してどのような情報を管理するかを決め、そのアトリビュート(属性)を定義します。 属性はエンティティの詳細情報であり、顧客であれば「名前」「住所」「電話番号」、注文であれば「注文日」「配送方法」といった項目が属性になります。 実務においては、以下のように画面設計書の画面を基に抽出すると素早くアトリビュートを埋めることができます。
また、この段階でデータを識別するために各エンティティのPK(主キー)とFK(外部キー)を決めておきます。
PKとFKの決め方は以下の通りです。
- PKを決める際には、各レコードを一意に識別できる属性を選びます。上図では、「顧客ID」や「注文ID」のような、各エンティティ内で重複しない値にすることが理想的です。
- FKを決める際には、他のテーブルのPKを参照することで、テーブル間の関係性を表すことができる属性を選びます。上図では、「注文」テーブルの「顧客ID」を「顧客」テーブルのPKである「顧客ID」とリンクさせ、どの注文がどの顧客に関連するかを示しています。
この段階で、論理モデルまでが完成しているイメージです。
さらに物理モデルのER図を作成する場合には、上記までの論理モデルER図に、データ型やデータのサイズなどを記述する必要があります。
手順としては
①エンティティ・アトリビュートを物理名(英字表記)に置き換える
②データ型・サイズを記載する
の2つです。
具体的には、上図赤枠の部分のように、データ名(customer_name)と、データ型(varchar)を記載します。
(50)は、データの細部を表しており、50文字以内のデータということを意味しています。
また、以下によく使われるデータ型とサイズの記載方法をまとめているので参考にしていただければと思います。
③エンティティ同士のリレーションを記載する
次に、エンティティ間の関係を明確にし、リレーションを記載します。 エンティティ間の関係には「1対1」「1対多」「多対多」などがあり、たとえば上記のような「顧客」と「注文」の関係は「1対多」(1人の顧客が複数の注文をする)です。
このステップで、データベースの全体像がわかりやすくなり、設計がスムーズに進みます。
出来上がったER図を見ながら、各エンティティと関係がきちんと整理されているか、重複や不足がないかを確認しましょう。
実際にはこのプロセスを行ったり来たりして、解像度を高めながら作成することになるかと思いますが、ここまでを意識しながら実践することで、基本的なER図を書くことができるようになります。
次に素早くかつ見やすくER図を書くテクニックを紹介しておくので、ぜひ実践の際にお役立てください。
ER図を素早く見やすく描くためのテクニック3つを紹介
- 階層構造と親子関係を意識する
エンティティ間に階層構造がある場合(例えば、部署と社員など)、親子関係を示すことで、より視覚的に理解しやすくなります。親エンティティから子エンティティへの関係を示す矢印や線を利用したり、親エンティティを左上から始めるなどすると、見やすくまとまりがあるER図になります。
- サブシステムごとにER図を分割する
大規模なシステムを開発する場合は、すべてのエンティティが画面に入りきらないこともあります。その場合は、エンティティ全体から顧客系・在庫系などエンティティを切り離して物理ER図などの詳細を記載することもできます。 システムごとに分解してER図を作成することで、よりわかりやすい設計に繋がります。
- ツールを利用する
ER図を手書きで作成する場合もありますが、専用のツールを使用すると効率的です。ER図は何度も修正が入ることが多いので、修正しやすいツールなどを使うと工数を減らすことができます。次の章では、無料で使えるおすすめのツールを紹介するので、ぜひ活用いただければと思います。
無料で使えるER図作成ツールを紹介!
ここでは、無料利用可能かつ初心者でも使いやすいER図作成ツールを厳選したので、特徴とともに紹介していきます。
draw.io
draw.ioには、ER図用のテーブル・カーディナリや、サンプル例が用意されており、直観的にER図を作成するのに役立ちます。登録など不要でブラウザからそのまま使える点も魅力的です。 GoogleDriveなどのクラウドに保存することができ、データの保存や共有が簡単にできます。
Lucidchart
Lucidchartでは、ドラッグ&ドロップで簡単にER図を作成できます。テンプレートが豊富でER図用のものが多く用意されていることや、クラウドベースでチームでの作業がしやすいのがおすすめのポイントです。
無料版には制限があるので、使いたい範囲によってアップグレードを検討しましょう。
まとめ
今回は、ER図の基本情報から書き方までを解説してきました。データベース設計で実際にER図を書く際には、ぜひこの記事をご参考にしていただければと思います。
また、New Venture Voiceでは他にも役立つ技術記事を発信しています。 ぜひ以下の関連記事からご覧ください。
ノーコードのアプリ開発はGenAiにおまかせ!
株式会社GenAiは、ノーコード/ローコードツールを用いたスピード感ある開発が得意領域です。
具体的には、GenAiではプラットフォーム依存の少ないローコードツールである「FlutterFlow」をメインに、自由度や拡張性を兼ね備えた「ブレンド開発」という手法での開発を行っています。
RDBを用いたバックエンドを採用する際は、弊社のリードエンジニアが拡張性・検索性能を考慮したERD設計を行った上でシステム構築を行います。
スピード感を担保しつつ、柔軟に開発をしたいという方はぜひ一度、株式会社GenAiにご相談ください。
新規事業アプリ開発をリードいただけるエンジニアを募集!
また、GenAi株式会社ではエンジニアを募集中です。
GenAiには、自社プロダクト開発や、他社向けのアプリケーション開発などの案件があり、フルスタックエンジニアを目指せる環境が整っています。
現在のメンバーは、社員メンバーと業務委託含め20名ほど。人数がまだまだ少ないからこそ実現できるチャレンジや、裁量の大きさ、ひとりひとりが業務に集中できる環境です。
エンジニアは未経験から募集しているので、ぜひこちらから詳細をご覧ください。