ERDはEntity-Relationship Diagram(エンティティ・リレーションシップ・ダイアグラム)の略だよ。これはデータベースの構造を視覚的に表現したもので、エンティティ(テーブル)がどうやってお互いに関係してるかを示してるんだ。
イメージとしては、ERDはデータベースの地下鉄マップみたいなもの。駅がテーブルで、駅同士をつなぐ線がリレーション(関係)。このマップがあれば、駅(テーブル)間の移動(やりとり)がどうなってるか一目でわかるよ。
ERDは次の要素でできてる:
- エンティティ:これは「学生」「コース」「先生」みたいなオブジェクトやテーブルのこと。
- アトリビュート:これはテーブルのカラム、たとえば
ID、名前、苗字みたいなやつ。 - リレーション:これはテーブル同士をつなぐ線で、たとえば「1人の学生が複数のコースを受講してる」みたいな関係を表すよ。
ERDを使えば、データベースの設計だけじゃなくて、同僚や上司に「こうなってるよ!」って説明するのも超ラクになる。開発者なら絶対持っておきたい強力なツールだね!
ERDの基本要素
- エンティティ
エンティティは、ミニデータベースみたいなもの。それぞれのエンティティは、システムで管理したい現実世界のオブジェクトや概念に対応してる。たとえば:
- 「学生」テーブル
- 「コース」テーブル
- 「貸出」テーブル(図書館システムの場合)
例:
+---------------+
| 学生 |
+---------------+
| ID |
| 名前 |
| 苗字 |
| 生年月日 |
+---------------+
- アトリビュート アトリビュートは、エンティティの個別のプロパティや特徴のこと。データベースのテーブルではカラムとして表現される。たとえば:
- 「学生」テーブルなら
ID、名前、苗字など。 - 「コース」テーブルなら
コースID、コース名など。
ERDでは、たいていエンティティを表す四角の中に書かれるよ。
エンティティ間のリレーション
リレーションは、2つのエンティティがどう関わってるかを示すもの。主なリレーションの種類をおさらいしよう:
- 1対1(1:1):たとえば、各学生が1つだけユニークなIDカードを持ってる場合。
- 1対多(1:N):たとえば、1人の先生が複数のコースを担当してる場合。
- 多対多(M:N):たとえば、複数の学生が複数のコースを受講してる場合。
「1対多」リレーションの例:
学生 (1) <----- 受講 -----> (N) コース
データベースでリレーションを実現するには、外部キーを使うのが一般的だよ。
どうやってERDを作る?
ERDを作る手順をステップごとに見ていこう。図書館の例もあわせて紹介するね。
ステップ1:エンティティを決める
まずはシステムを主要なオブジェクトに分解しよう。たとえば図書館システムなら:
- 「本」
- 「利用者」
- 「貸出」
例:
+-------------+ +--------------+ +------------+
| 本 | | 利用者 | | 貸出 |
+-------------+ +--------------+ +------------+
| ID | | ID | | ID |
| タイトル | | 名前 | | 利用者 |
| 著者 | | 苗字 | | 本 |
| ISBN | | 生年月日 | | 貸出日 |
+-------------+ +--------------+ +------------+
ステップ2:アトリビュートを追加
各エンティティにはキーとなるアトリビュートが必要だよ。たとえば:
- 「本」テーブルには
ID(主キー)、タイトル、著者、ISBNが必要。 - 「利用者」テーブルには
ID、名前、苗字など。
ステップ3:リレーションを設定
次にエンティティ同士のリレーションを追加しよう:
- 「貸出」は「本」とリレーション(1冊の本が何回も貸し出されることがある)。
- 「貸出」は「利用者」とリレーション(1人の利用者が何冊も借りられる)。
ステップ4:ビジュアライズしよう
ダイアグラム作成ツールを使ってみて:
- draw.io
- dbdiagram.io
- Lucidchart
- Microsoft Visio
ダイアグラムはこんな感じになるよ:
[利用者] ----(1:N)---- [貸出] ----(N:1)---- [本]
各リレーションにはデータ型や説明もつけておこう。たとえば:
- 利用者ID(「貸出」テーブル内)は「利用者」テーブルの主キーとリレーションしてる。
例:ネットショップのERD
ネットショップの場合は、次のような論理構造が必要だよ:
- ユーザー(登録済みの顧客)
- 商品
- 注文
ステップ1:エンティティ
- ユーザー:
ユーザーID、名前、Email - 商品:
商品ID、商品名、価格 - 注文:
注文ID、ユーザーID、注文日
ステップ2:リレーションの設定
- 1人のユーザーが複数の注文をすることができる(1:N)
- 1つの注文に複数の商品が含まれることがある(M:N)
完全なERDダイアグラム:
[ユーザー] ----(1:N)---- [注文] ----(N:M)---- [商品]
多対多リレーションを実現するには、中間テーブルを追加しよう:
- 注文内容:
注文ID、商品ID、数量
ERD作成のコツ
まずは「自分のデータベースで何を見たいのか?」を考えよう。すべてはドメインの理解から始まるよ。
本当に必要なアトリビュートやエンティティだけを入れよう。細かすぎると逆に分かりにくくなる。
すべてのリレーションが論理的に正しいか確認しよう。「なんか変だな」と思ったら見直してみて。
ダイアグラムをビジュアライズできるツールを使おう。時間も手間も節約できるよ。
GO TO FULL VERSION