データモデリングとは、データおよびそのデータベース内の関係を視覚的に表現するプロセスです。データモデリングで最も一般的に使用されるツールの一つがエンティティ関係図(ERD)であり、図形記号を用いてエンティティ、属性、関係を表現します。この記事では、ERDを用いたデータモデリングのプロセスを検討し、実際のシナリオでどのように使用できるかの例を示します。
エンティティ関係図(ERD)とは何ですか?
ERDは、エンティティ、その属性、およびそれらの間の関係を視覚的に表現したものです。エンティティとは、データベースに表現されるオブジェクトや概念を指し、顧客、注文、製品などが含まれます。属性はエンティティの特徴や性質を表し、名前、住所、価格などが該当します。関係とは、エンティティ間の関連を指し、顧客が注文を行うといった状況が含まれます。
ERDは通常、以下の構成要素で構成されます:
- エンティティ:エンティティ名が内部に記載された長方形で表される。
- 属性:その属性が所属するエンティティに線で接続された楕円で表される。
- 関係:エンティティを結ぶダイヤモンドで表される。
エンティティ間で存在しうる関係の種類は以下の3つである:
- 1対1(1:1):1つのエンティティのインスタンスが、別のエンティティの1つのインスタンスと関連する場合。
- 1対多(1:N):1つのエンティティのインスタンスが、別のエンティティの複数のインスタンスと関連する場合。
- 多対多(N:M):複数のエンティティのインスタンスが、別のエンティティの複数のインスタンスと関連する場合。
ERDを用いたデータモデリングの例
顧客に書籍を販売するオンライン書店の例を検討しましょう。この書店には複数の書籍カテゴリがあり、注文を行うことができる多数の顧客がいます。このシステムをERDでモデル化するには、まず関与するエンティティ、属性、関係を特定することから始めます。
エンティティ:
- Book:書店内の書籍を表す。タイトル、著者、ISBN、価格などの属性を含む。
- Category:書店内の書籍のカテゴリまたはジャンルを表す。名前や説明などの属性を含む。
- Customer:書店に登録した顧客を表す。名前、住所、メールアドレスなどの属性を含む。
- Order:顧客が行った注文を表す。注文日、合計金額などの属性を含む。また、顧客エンティティへの外部キー参照があり、どの顧客が注文したかを示す。
- Book_Category:書籍とカテゴリ間の多対多関係を表す。BookおよびCategoryエンティティへの外部キー参照を含む。
- Order_Book:注文と書籍間の多対多関係を表す。OrderおよびBookエンティティへの外部キー参照を含む。
関係:
- 1冊の書籍は複数のカテゴリに属することができる(多対多)。
- 1つのカテゴリには複数の書籍が存在できる(1対多)。
- 1人の顧客は複数の注文を行うことができる(1対多)。
- 1つの注文には複数の書籍が含まれる可能性がある(多対多)。
これらのエンティティ、属性、関係を踏まえて、オンライン書店システム用のERDを作成できます。ERDは以下のようになります:

このERD図では、BookエンティティとCategoryエンティティの間には多対多関係があることがわかります。これは、1冊の書籍が複数のカテゴリに属することができ、1つのカテゴリに複数の書籍が存在できることを意味します。CustomerエンティティとOrderエンティティの間には1対多関係があり、1人の顧客が複数の注文を行うことができる一方、1つの注文は1人の顧客にのみ属することを意味します。最後に、OrderエンティティとBookエンティティの間には多対多関係があり、1つの注文に複数の書籍が含まれる可能性があり、1冊の書籍が複数の注文に含まれることも可能であることを意味します。
Visual ParadigmでデータベーススキーマのSQLコードを生成する
テーブル book {
ID int [主キー、自動増加]
タイトル varchar
著者 varchar
ISBN varchar
価格 float
}テーブル category {
ID int [主キー、自動増加]
名前 varchar
説明 varchar
}テーブル customer {
ID int [主キー、自動増加]
名前 varchar
住所 varchar
メールアドレス varchar
}テーブル order {
ID int [主キー、自動増加]
注文日時 datetime
合計金額 float
顧客ID int [参照: > customer.ID]
}テーブル book_category {
書籍ID int [参照: > book.ID]
カテゴリID int [参照: > category.ID]
}テーブル order_book {
注文ID int [参照: > order.ID]
書籍ID int [参照: > book.ID]
}
結論
ERDを用いたデータモデリングは、データベース内のエンティティ間の関係を可視化し、理解するのに役立つ重要なプロセスです。エンティティ、属性、関係を特定することで、データとその構造を明確かつ簡潔に表現できるERDを作成できます。これにより、組織のニーズを支えることができる効率的で効果的なデータベースの設計と維持が可能になります。











