要件定義 / 基本設計 / 詳細設計
基本:共通仕様 / 機能一覧 / テーブル一覧 / 画面一覧 / 画面遷移
詳細:テーブル定義書 / 画面定義書 / イベント仕様書
Northwind 原典の 13 テーブルに、パフォーマンス分析要件のための 1 テーブル(SalesTargets)を加えた計 14 テーブルで構成する。
| # | 物理名 | 論理名 | 区分 | 主キー | 主モジュール | 定義書 |
|---|---|---|---|---|---|---|
| 1 | Orders |
受注 | トランザクション | OrderID |
受注管理 | Orders.md |
| 2 | Order Details |
受注明細 | トランザクション | OrderID, ProductID |
受注管理 | Orders.md |
| 3 | Customers |
顧客 | マスタ | CustomerID |
顧客管理 | Customers.md |
| 4 | CustomerDemographics |
顧客区分 | マスタ | CustomerTypeID |
顧客管理 | Customers.md |
| 5 | CustomerCustomerDemo |
顧客・顧客区分関連 | 関連 | CustomerID, CustomerTypeID |
顧客管理 | Customers.md |
| 6 | Products |
商品 | マスタ | ProductID |
商品管理 | Products.md |
| 7 | Categories |
カテゴリ | マスタ | CategoryID |
商品管理 | Products.md |
| 8 | Suppliers |
仕入先 | マスタ | SupplierID |
仕入先管理 | Suppliers.md |
| 9 | Employees |
社員 | マスタ | EmployeeID |
担当者管理 | Employees.md |
| 10 | Region |
地域 | マスタ | RegionID |
担当者管理 | Employees.md |
| 11 | Territories |
テリトリー | マスタ | TerritoryID |
担当者管理 | Employees.md |
| 12 | EmployeeTerritories |
社員・テリトリー関連 | 関連 | EmployeeID, TerritoryID |
担当者管理 | Employees.md |
| 13 | Shippers |
運送会社 | マスタ | ShipperID |
配送管理 | Shippers.md |
| 14 | SalesTargets |
売上目標 | トランザクション | EmployeeID, TargetYear, TargetMonth |
パフォーマンス分析 | Analysis.md |
SalesTargets のみ本設計での追加テーブル。他の 13 テーブルは Northwind 原典の構造を保持する(追加は楽観排他用の RowVersion 列のみ)。
「更新」はそのモジュールが登録・更新・削除を行うテーブル、「参照」は表示・検索のために読むテーブル。
| モジュール | 更新 | 参照 |
|---|---|---|
| 受注管理 | Orders, Order Details, Products(出荷時の在庫数) |
Customers, Employees, Shippers, Products |
| 顧客管理 | Customers, CustomerCustomerDemo |
CustomerDemographics, Orders, Order Details |
| 商品管理 | Products, Categories |
Suppliers, Order Details |
| 仕入先管理 | Suppliers |
Products, Categories |
| 担当者管理 | Employees, EmployeeTerritories |
Territories, Region, Orders, Order Details |
| 配送管理 | Shippers |
Orders, Order Details |
| 売上分析 | - | Orders, Order Details, Products, Categories, Customers |
| 在庫分析 | - | Products, Categories, Order Details, Orders, Suppliers |
| パフォーマンス分析 | SalesTargets |
Employees, Orders, Order Details, EmployeeTerritories, Territories, Region |
erDiagram
Customers ||--o{ Orders : "受注する"
Employees ||--o{ Orders : "担当する"
Shippers ||--o{ Orders : "配送する"
Orders ||--|{ "Order Details" : "明細を持つ"
Products ||--o{ "Order Details" : "明細に現れる"
Categories ||--o{ Products : "分類する"
Suppliers ||--o{ Products : "供給する"
Employees ||--o{ Employees : "上司部下"
Employees ||--o{ EmployeeTerritories : "担当する"
Territories ||--o{ EmployeeTerritories : "割り当てられる"
Region ||--o{ Territories : "含む"
Customers ||--o{ CustomerCustomerDemo : "区分を持つ"
CustomerDemographics ||--o{ CustomerCustomerDemo : "区分される"
Employees ||--o{ SalesTargets : "目標を持つ"
外部キー制約は DB に定義しない(DB に持たせない制約)。
下表の判定はアプリケーションが削除の前に実施し、該当する場合は ERR-FK(共通仕様 7 節)とする。
DB は削除を拒否しないため、この確認を省略すると不整合なデータが残る。
| 削除対象 | 削除できない条件 |
|---|---|
Customers |
当該顧客の Orders が存在する |
Employees |
当該社員の Orders が存在する、または ReportsTo に当該社員を指す Employees が存在する |
Shippers |
ShipVia に当該運送会社を指す Orders が存在する |
Products |
当該商品の Order Details が存在する |
Categories |
当該カテゴリの Products が存在する |
Suppliers |
当該仕入先の Products が存在する |
Orders |
なし(明細を先に削除したうえで削除する) |
CustomerCustomerDemo と EmployeeTerritories は関連テーブルであり、親の削除時にあわせて削除する。
SalesTargets も社員の削除時にあわせて削除する。
CASCADE は使わないため、これらの削除はアプリケーションが同一トランザクション内で順に実行する。