【データモデリング】 概念設計のチュートリアル

投稿更新日: 2025/6/6

サムネイル

データモデリングは、システム設計の基盤となる重要なプロセスです。 特に、エンティティを適切に抽出することで、データの構造が明確になり、システムの拡張性や保守性が向上します。 本記事では、ECサイトを題材にして、エンティティ抽出の手順を詳しく解説します。

1. シナリオの設定

まず、ECサイトにおける主要な機能を整理しましょう。

  • 商品一覧の表示
  • カートへの追加・削除
  • 注文処理
  • 決済処理

このシナリオをもとに、データモデルの基盤となるエンティティを抽出します。

2. エンティティ抽出の手順

エンティティとは、システム内で管理すべき「データのまとまり」です。 エンティティを抽出する際には、以下の観点からアプローチすると整理しやすくなります。

2.1 モノとコトの視点でのエンティティ抽出

エンティティは、大きく「モノ(物理的または概念的な存在)」と「コト(イベントや取引)」の2種類に分類できます。

  • モノ: ユーザー、商品 など、実態として存在するもの
  • コト: 注文、決済 など、システム内で発生する出来事や取引

この視点でシナリオを整理し、以下の手順でエンティティを洗い出します。

  1. システム内で管理する必要がある「モノ」を特定する
  2. システム内で発生する「コト」を特定する
  3. エンティティごとに**ナチュラルキー(自然キー)**を見つける
    • ナチュラルキーとは、データを一意に識別できる属性の組み合わせ(例: ユーザー は メールアドレス、 商品 は 商品コード など)
  4. エンティティ間の関連を整理する

3. エンティティと属性

以下のようなエンティティを抽出し、それぞれの属性を定義します。

エンティティ和名エンティティ英名区分属性名 (日)属性名 (英)説明
ユーザーUserモノユーザー名usernameユーザーの識別情報
メールアドレスemailユーザーの連絡先(ナチュラルキー)
パスワードpassword認証情報
商品Productモノ商品名name商品の名称
商品コードproduct_code一意に識別できる商品番号(ナチュラルキー)
価格price商品の販売価格
在庫数stock在庫の数量
カートCartコトユーザーuserカートを持つユーザー
商品productカートに入っている商品
数量quantity選択された商品の個数
追加日時added_atカートに追加した日時
注文Orderコト注文番号order_number一意に識別できる注文番号(ナチュラルキー)
ユーザーuser注文を行ったユーザー
合計金額total_price注文の総額
ステータスstatus注文の状態(例: 確定、発送済み)
注文日時orderd_at注文した日時
決済Paymentコト決済番号payment_number一意に識別できる決済番号(ナチュラルキー)
注文order対応する注文
決済方法methodクレジットカード、銀行振込などの支払い方法
ステータスstatus決済の状態(成功、失敗など)
決済日時payment_at決済した日時

4. エンティティ間の関係(ER図)

以下のER図を使用して、エンティティ間の関係を可視化します。

erDiagram
    User {
        string username
        string email
        string password
    }
    Product {
        string name
        string product_code
        float price
        int stock
    }
    Cart {
        string user
        string product
        int quantity
    }
    Order {
        string order_number
        string user
        float total_price
        string status
    }
    Payment {
        string payment_number
        string order
        string method
        string status
    }

    User ||--o{ Cart : has
    User ||--o{ Order : places
    Cart }o--|| Product : contains
    Order }o--|| Product : includes
    Order ||--o{ Payment : processes

関係の説明

  • User と Cart: 1人のユーザーが複数のカートエントリを持つ(1対多)
  • User と Order: 1人のユーザーが複数の注文を行う(1対多)
  • Cart と Product: 1つのカートには複数の商品が含まれる(多対多)
  • Order と Product: 1つの注文には複数の商品が含まれる(多対多)
  • Order と Payment: 1つの注文に対して1つの決済が行われる(1対1)

ここでは、エンティティの物理名やIDについては言及せず、ナチュラルキーに着目してエンティティを定義しています。

5. まとめ

エンティティ抽出は、データモデリングの第一歩です。本記事では、ECサイトの基本機能をもとに、エンティティを抽出し、それぞれの属性を定義しました。また、「モノとコト」の視点からエンティティを整理し、ナチュラルキーに着目する手法を紹介しました。

次のステップとして、正規化やリレーショナルデータベースの設計へと進んでいきましょう!


この記事をシェアする

合同会社raisexでは一緒に働く仲間を募集中です。

ご興味のある方は以下の採用情報をご確認ください。