データベース設計は、システム開発において重要な工程の一つです。特に大規模なシステムでは、適切なデータモデルを設計することで、パフォーマンスや拡張性、保守性を大幅に向上させることができます。
本記事では、SQL Serverを前提としたデータベース設計の基本的な手順として、ER図(エンティティ・リレーションシップ図)の作成方法と、実体(エンティティ)およびリレーション(関係)の設計手法について詳しく解説します。
データモデリングとは
データモデリングは、データベースの構造を設計するプロセスです。適切なデータモデリングを行うことで、以下のメリットを得られます。
- データの一貫性を確保できる
- データの冗長性を最小限に抑えられる
- クエリのパフォーマンスを向上させられる
- メンテナンスが容易になる
データモデリングの代表的な手法として、概念データモデル(CDM)、論理データモデル(LDM)、物理データモデル(PDM)の3つがありますが、本記事では主に論理データモデルを中心に解説します。
ER図(エンティティ・リレーションシップ図)とは
ER図(Entity-Relationship Diagram)は、データベース設計の初期段階で作成するモデルです。これは、システム内のデータの関連性を視覚的に表現する図で、主に以下の3つの要素で構成されます。
- エンティティ(Entity):データベース内で管理するデータの対象(例:ユーザー、商品、注文など)
- アトリビュート(Attribute):エンティティが持つ属性(例:ユーザー名、価格、注文日など)
- リレーションシップ(Relationship):エンティティ同士の関係性(例:ユーザーが注文を行う、商品が注文に含まれるなど)

ER図の記法
ER図の記法としては、Chen記法やIE記法(情報エンジニアリング記法)が一般的ですが、SQL Serverのデータベース設計ではIE記法がよく使われます。
IE記法では、エンティティは長方形で表し、リレーションシップは線で接続します。
SQL Serverのデータモデル設計手順
①要件定義
データベース設計の第一歩は、ビジネス要件を整理し、管理すべきデータを洗い出すことです。たとえば、ECサイトのデータベースを設計する場合、以下のようなエンティティが考えられます。
- ユーザー(Users)
- 商品(Products)
- 注文(Orders)
- 注文詳細(OrderDetails)
②エンティティの定義
次に、各エンティティの属性を定義します。
エンティティ | 属性名 | 型 | 説明 |
---|---|---|---|
Users | UserID | INT | ユーザーの一意な識別子(PK) |
Users | UserName | VARCHAR(255) | ユーザー名 |
Users | VARCHAR(255) | メールアドレス | |
Products | ProductID | INT | 商品の一意な識別子(PK) |
Products | ProductName | VARCHAR(255) | 商品名 |
Orders | OrderID | INT | 注文の一意な識別子(PK) |
Orders | UserID | INT | 注文を行ったユーザー(FK) |
OrderDetails | OrderDetailID | INT | 注文詳細の一意な識別子(PK) |
OrderDetails | OrderID | INT | 関連する注文(FK) |
OrderDetails | ProductID | INT | 注文された商品(FK) |
③リレーションの定義
エンティティ間のリレーションを定義します。
- UsersとOrders:1人のユーザーは複数の注文を行う(1対多)
- OrdersとOrderDetails:1つの注文には複数の商品が含まれる(1対多)
- ProductsとOrderDetails:1つの商品は複数の注文に含まれる(多対多)
演習問題
問題 1
以下のような新しいエンティティ「カテゴリ(Categories)」を追加してください。
要件
- 各商品には1つのカテゴリが関連付けられる
- 各カテゴリには複数の商品が属する
- カテゴリにはカテゴリ名(CategoryName)を含む
質問
- ER図にカテゴリ(Categories)エンティティを追加する場合、どのようなリレーションを設定すればよいですか?
- SQL Serverでこのカテゴリエンティティを定義するSQLを記述してください。
解答例
解答 1
- リレーションの定義
- Categories(1)対 Products(多)のリレーション(1対多)
解答 2
CREATE TABLE Categories (
CategoryID INT PRIMARY KEY IDENTITY(1,1),
CategoryName VARCHAR(255) NOT NULL
);
ALTER TABLE Products ADD CategoryID INT;
ALTER TABLE Products ADD CONSTRAINT FK_Products_Categories FOREIGN KEY (CategoryID) REFERENCES Categories(CategoryID);
まとめ
本記事では、SQL Serverのデータベース設計において、ER図の作成方法やエンティティ・リレーションの設計手法を解説しました。
特に、大規模システムでは適切なデータモデリングが重要であり、論理設計の段階でしっかりとしたデータモデルを作成することで、システムの拡張性や保守性を向上させることができます。
今後は、実際のSQL Server上でのテーブル設計やインデックスの最適化についても学ぶと、より実践的な知識が身につくでしょう。