SQL Serverのデータベース設計:ER図の作成と実体・リレーションの設計

データベース設計は、システム開発において重要な工程の一つです。特に大規模なシステムでは、適切なデータモデルを設計することで、パフォーマンスや拡張性、保守性を大幅に向上させることができます。

本記事では、SQL Serverを前提としたデータベース設計の基本的な手順として、ER図(エンティティ・リレーションシップ図)の作成方法と、実体(エンティティ)およびリレーション(関係)の設計手法について詳しく解説します。


データモデリングとは

データモデリングは、データベースの構造を設計するプロセスです。適切なデータモデリングを行うことで、以下のメリットを得られます。

  • データの一貫性を確保できる
  • データの冗長性を最小限に抑えられる
  • クエリのパフォーマンスを向上させられる
  • メンテナンスが容易になる

データモデリングの代表的な手法として、概念データモデル(CDM)論理データモデル(LDM)物理データモデル(PDM)の3つがありますが、本記事では主に論理データモデルを中心に解説します。


ER図(エンティティ・リレーションシップ図)とは

ER図(Entity-Relationship Diagram)は、データベース設計の初期段階で作成するモデルです。これは、システム内のデータの関連性を視覚的に表現する図で、主に以下の3つの要素で構成されます。

  1. エンティティ(Entity):データベース内で管理するデータの対象(例:ユーザー、商品、注文など)
  2. アトリビュート(Attribute):エンティティが持つ属性(例:ユーザー名、価格、注文日など)
  3. リレーションシップ(Relationship):エンティティ同士の関係性(例:ユーザーが注文を行う、商品が注文に含まれるなど)
シンプルなER図

ER図の記法

ER図の記法としては、Chen記法IE記法(情報エンジニアリング記法)が一般的ですが、SQL Serverのデータベース設計ではIE記法がよく使われます。

IE記法では、エンティティは長方形で表し、リレーションシップは線で接続します。


SQL Serverのデータモデル設計手順

①要件定義

データベース設計の第一歩は、ビジネス要件を整理し、管理すべきデータを洗い出すことです。たとえば、ECサイトのデータベースを設計する場合、以下のようなエンティティが考えられます。

  • ユーザー(Users)
  • 商品(Products)
  • 注文(Orders)
  • 注文詳細(OrderDetails)

②エンティティの定義

次に、各エンティティの属性を定義します。

エンティティ属性名説明
UsersUserIDINTユーザーの一意な識別子(PK)
UsersUserNameVARCHAR(255)ユーザー名
UsersEmailVARCHAR(255)メールアドレス
ProductsProductIDINT商品の一意な識別子(PK)
ProductsProductNameVARCHAR(255)商品名
OrdersOrderIDINT注文の一意な識別子(PK)
OrdersUserIDINT注文を行ったユーザー(FK)
OrderDetailsOrderDetailIDINT注文詳細の一意な識別子(PK)
OrderDetailsOrderIDINT関連する注文(FK)
OrderDetailsProductIDINT注文された商品(FK)

③リレーションの定義

エンティティ間のリレーションを定義します。

  • UsersとOrders:1人のユーザーは複数の注文を行う(1対多)
  • OrdersとOrderDetails:1つの注文には複数の商品が含まれる(1対多)
  • ProductsとOrderDetails:1つの商品は複数の注文に含まれる(多対多)

演習問題

問題 1

以下のような新しいエンティティ「カテゴリ(Categories)」を追加してください。

要件
  • 各商品には1つのカテゴリが関連付けられる
  • 各カテゴリには複数の商品が属する
  • カテゴリにはカテゴリ名(CategoryName)を含む
質問
  1. ER図にカテゴリ(Categories)エンティティを追加する場合、どのようなリレーションを設定すればよいですか?
  2. 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上でのテーブル設計やインデックスの最適化についても学ぶと、より実践的な知識が身につくでしょう。