できるエンジニアになるためのちょい上DB術/第2章 概念設計
2.3 概念設計の手順(3/3)
2.3.5 概念データモデルの検証
概念設計フェーズで必要なエンティティ、属性、リレーションを分析し終わったら、必要なデータがすべて抽出されているかという観点で検証作業を行います。
概念データモデルを検証する場合には、以下の2つの観点から検証してください。
データモデルとして見直す
- 業務と矛盾していないか(業務要件を満たすエンティティ、属性が揃っているか)
- リレーションシップは適切か
- 第3正規形を満たしているか
プロセスから見直す
- プロセスから見て必要な入出力データはすべて定義されているか
- データから見てライフサイクル(CRUD:Create、Reference、Update、Delete)を管理するためのプロセスは揃っているか
また、検証する際のポイントは以下のとおりです。
- 導出項目、重複項目が「導出項目、重複項目である」と明記してモデルに残されているか
- 将来の拡張性を考慮して属性をエンティティとしておく、将来管理されるべきデータをエンティティとして作成してあるか
- ER図の解答は1つになるとは限らない。誤りは正す必要があるが、許容範囲内の差異について無駄な時間を浪費しない
プロセスから見た拡張性のあるER図
難しいのは、拡張性を見越したエンティティの抽出でしょう。
逆にいうと、ユーザの要求を把握できたコンサルタントの腕の見せ所かもしれません。
ここでは、一般的にプロセス処理を考慮した、拡張性のあるエンティティの設計のポイントをまとめます。
- 1.今は1対多であるが、将来的に多対多になりそうなもの:
履歴まで管理しようとすると、多対多になるものがほとんどになるが、なんでも多対多にしない。
履歴を管理する必要があるかどうかを検討して決める。 - 2.履歴データの扱い:
1つ前のデータだけもっていればよい場合には、同一エンティティ内に旧項目1つを管理するための属性をもたせる - 3.削除や変更の取り消し(undo機能):
変更を遡って管理しなければならないもの、変更の理由などを管理すべき場合は、履歴扱いにする - 4.管理すべきカテゴリ(商品タイプなど)が増加しそうなもの:
サブタイプとして管理する。商品タイプが追加された場合、サブタイプを追加することで対応できるようにする
CRUDマトリクス分析
プロセスとデータの両方の観点から抜け、漏れ、過度の集中、不完全な分割がないか、という観点でCRUDマトリクスを使用した分析を行います。手順と例を示します。
【STEP1】マトリックスの作成
- 識別されたエンティティと、プロセス分析で作成されたDFDの結果をマトリックスの形でまとめる
- 両者の交点に、オカレンスのCRUD記号を記述する
C:Create R:Retrieve U:Update D:Delete
【STEP2】データのライフサイクルの確認
CRUDマトリクスを使用して、以下の点をチェックする
- プロセスの観点から必要なエンティティ(I/O)が揃っているか
- エンティティを使用しないプロセスはないか
- プロセスに関与しないエンティティがないか(その場合、機能が漏れていないか)
- エンティティと機能のアンバランス
- エンティティに対応するCRUDのどれかが欠けていないか
- 1つの機能にCRUDが集中(機能分割が不十分)していないか
- 1つの機能で複数のエンティティのC、Dに関与していないか
- 複数の機能が1つのエンティティのCに関与(機能の重複)していないか
【STEP3】その他のCRUDマトリクスを使用した分析例
プロセスの複雑さの確認
適切に機能分割が行われているかを確認する必要があります。
単純検索、単純更新のような処理では、処理時間(レスポンスタイム)に注意する必要があります。
データのアクセス頻度の確認
複数のプロセスからアクセスされるデータは、アクセス頻度が高くなり、I/0のボトルネックになる可能性があります。
物理設計でデータの配置に注意します。
サブシステム分割の日安
「C(生成)」がマトリックスの左上から右下に並ぶように配置し、エンティティに対するCRUDの近いプロセス群を1つのサブシステムとみなし、分割の目安とします。
同一のプロセスから頻繁に同時にアクセスされる複数のエンティティは、正規化によって分割されていますが、非常に親和性の高いエンティティであることがわかります。
物理設計時、クラスタ化表の対象として考慮します。
それでは、この事の最後にCRUDマトリクスを使った簡単な検証作業を行うクイズに挑戦してみてください。
クイズ6
1.入会 | 2.受注 | 3.納品 | 4.請求 | 5.受注 処理 |
6.入荷 検査 |
7.契約 解除 |
|
---|---|---|---|---|---|---|---|
1.会員 | C | R | R | D | |||
2.受注 | C | R | |||||
2.受注明細 | C | R/U | R | ||||
4.商品 | R | R/C | U | ||||
5.在庫 | R | R/C | U | ||||
6.仕入先 | R | ||||||
7.発注 | C | U | |||||
8.売掛金 | C | C/U |
表2-7 CRUDマトリクス修正前
クイズ6の解答例
エンティティの上から順に解説します。
- 会員情報の更新プロセスがないので、入会プロセスに会員メンテナンスプロセスを追加する
- 受注/受注明細情報の更新、削除プロセスがないので、受注プロセスに受注変更、削除プロセスを追加する
- 商品情報の更新、削除プロセスがないので、商品マスタメンテナンスプロセスを追加する
- 在庫情報の削除プロセスがないので、商品マスタメンテナンスプロセスを追加する
- 仕入先データの作成、更新、削除プロセスがないので、仕入先マスタメンテナンスプロセスを追加する
- 発注情報の削除プロセスがないが、実際には発注処理プロセスで処理しているはずなので、表記を追加する
- 売掛金データの参照、消し込みプロセスがないので、入金プロセスを追加する。それに伴い入金エンティティも追加する
- 支払いプロセスがないので、追加する。支払いエンティティも追加する
本章では、概念設計の手順とER図の作成方法について紹介しました。
トップダウンの分析とボトムアップの分析を組み合わせて、拡張性の高い、業務に即した、理想的なデータ管理を実現するER図を作成することを心がけてください。
解説トレーナー