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

データモデリングは、システム設計の基盤となる重要なプロセスです。 特に、エンティティを適切に抽出することで、データの構造が明確になり、システムの拡張性や保守性が向上します。 本記事では、ECサイトを題材にして、エンティティ抽出の手順を詳しく解説します。
1. シナリオの設定
まず、ECサイトにおける主要な機能を整理しましょう。
- 商品一覧の表示
- カートへの追加・削除
- 注文処理
- 決済処理
このシナリオをもとに、データモデルの基盤となるエンティティを抽出します。
2. エンティティ抽出の手順
エンティティとは、システム内で管理すべき「データのまとまり」です。 エンティティを抽出する際には、以下の観点からアプローチすると整理しやすくなります。
2.1 モノとコトの視点でのエンティティ抽出
エンティティは、大きく「モノ(物理的または概念的な存在)」と「コト(イベントや取引)」の2種類に分類できます。
- モノ: ユーザー、商品 など、実態として存在するもの
- コト: 注文、決済 など、システム内で発生する出来事や取引
この視点でシナリオを整理し、以下の手順でエンティティを洗い出します。
- システム内で管理する必要がある「モノ」を特定する
- システム内で発生する「コト」を特定する
- エンティティごとに**ナチュラルキー(自然キー)**を見つける
- ナチュラルキーとは、データを一意に識別できる属性の組み合わせ(例: ユーザー は メールアドレス、 商品 は 商品コード など)
- エンティティ間の関連を整理する
3. エンティティと属性
以下のようなエンティティを抽出し、それぞれの属性を定義します。
| エンティティ和名 | エンティティ英名 | 区分 | 属性名 (日) | 属性名 (英) | 説明 |
|---|---|---|---|---|---|
| ユーザー | User | モノ | ユーザー名 | username | ユーザーの識別情報 |
| メールアドレス | ユーザーの連絡先(ナチュラルキー) | ||||
| パスワード | 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では一緒に働く仲間を募集中です。
ご興味のある方は以下の採用情報をご確認ください。