主に設計に関することのメモ。
Contents
業務フロー分析
顧客の業務フローがどのように動いているのかを図で確認する。
使えそうと思った図式化の手法は下記のようなもの
- まずやることを業務順に箇条書きにする。
- 実行順番と実行者がわかりやすいようにアクティビティー図にする。
- のちにエンティティを抽出したあとER図を作成する。
エンティティの抽出
業務フローの中で扱われる実態のあるリソース(顧客・社員・商品など)やイベント(入荷、出荷、注文)を抽出する。またイベントの履歴(購買履歴、在庫履歴)のようなサマリー系といわれるデータも存在する。
エンティティの関連付け
わかりやすいように可視化する。一般にイベントエンティティの上にリソースエンティティを書いたほうがわかりやすい。
ここで1:nなどの関連付けを行う。
主キーの抽出を行う
インスタンスをユニークに識別する値のこと。
主キーの特徴
- 値が不変
- 桁数がなるべく短い
- 複合した場合でも多くはならない(5つ以下)
- 必ず存在する(NULLにならない)
一般的には複数の主キーを使う、複合主キーが多いため、いわゆるauto_incrementタイプの自動で附番されるidをサロゲートキー(代理キー)といい、これが使われるケースが多い。
できれば自然に存在しているデータで主キーを考え、やむを得ずコードやidなどを考えるべき。コードなどは自動採番などではなく意味を込めて作ることができれば望ましい。JANコードはそういうつくり。(理想論かもしれないが・・・)
複合主キーをそのまま使うか、あるいは複合主キー的なキーを作る(ようはJANコードの容量)ことも考慮に入れること。
またサロゲートキーは以下のようなメリットとデメリットを覚えておく必要がある。
サロゲートキーのメリット
- 結合を使うSQLが比較的簡単になる
- テーブル間の依存度が薄くなる(複合主キーの場合、もし増えると別のテーブルにも影響度がでる)
- 3により比較的業務変更に強い
- データを特定するのがカンタン(複合主キーは煩雑)
サロゲートキーのデメリット
- 業務と無関係のキーが増える
- 容量が増える
個人的には一般的なテーブルではサロゲートキーを使って、関連テーブルなどの中間テーブルはナチュラルキーなのかな。。と思ってます。