Jの衝動書き日記

さらりーまんSEの日記でございます。

第7回 モデリングと主キーの選定

候補キーのエントリーを昔書いたが、最近でも結構読まれているっぽい。何せ「候補キー」で検索すると上位に表示されているから。おそるべしはてな。もっとも、一目見ただけで去れているケースがほとんどだとは思うけど。

まあ、それはさておき、前のエントリーは関数従属という理論からスタートしたので、今回はモデリングを焦点にあててみた。候補キーというか、主キーの選定方法である。

まずはエンティティ作り

さて、主キーを定めるまえに、それが属している集合、エンティティをまずは定める必要がある。試験では予め定まっているが、現実はそうもいかないのだ。エンティティの抽出方法はトップダウンボトムアップの二つのアプローチがある。

トップダウン・アプローチ

業務フローや業務記述書などからエンティティを抽出していく方法である。

エンティティ抽出のポイント

エンティティは大まかに分類すると大体リソース系とイベント系に分類される。業務フロー図などから、これらのエンティティと主要属性を抽出していく。

ネーミングの原則

  • 他と重複しない
  • あまり長くしない
  • 意味のない修飾は付与しない(◯◯マスターなど)

おおまかな手順

  1. リソース系エンティティの抽出
  2. リレーションシップの付与
  3. イベント系エンティティの抽出
  4. リレーションシップの付与
  5. リソース系とイベント系間でリレーションシップの付与
リソース系

リソースは、人、組織、物、設備、顧客、金などが該当する。ビジネスフロー上のボックス(図)で示されたものが候補となる。人/組織、取引先、物/設備などのようにカテゴリー分けして考えると抽出しやすい。また、管理対象の範囲をよく考えてエンティティ化するのもポイント。システムが扱う範囲を意識する。

また、エンティティ間の関連(リレーションシップ)をつけるときは、動詞表現を付与しておくとよい(指定する、所属するなど)。

イベント系

イベントは、企業活動を構成するアクティビティ(活動)が該当する。ビジネスフロー上でやりとりされるフローそのものが候補となる(注文、商品など)。発生から消滅までのライフサイクルを追う(注文→出荷→売上→支払など)。

抽出したイベントは、発生した順に並べておく。何故ならば、それがそのままリレーションシップになることが多いからである。

主キーの選定

属性間の結びつきの強さ(関数従属性)をまずは整理しておく。主キーの選定基準は以下の通り

  • 値が変わらないもの
  • できるだけ桁数は短いもの
  • 複合キーで連結が多くならない
  • 必ず存在する(NULL値をとらない)

また、トップダウンアプローチの時点では、出来るだけ代理キー(xxIDなど)は考えずに抽出済の属性の中から選ぶようにする。

ボトムアップ・アプローチ

トップダウンは設計書を元にエンティティを抽出していったが、ボトムアップで既に存在しているものからピックアップしていく方法である。抽出元の主なものは画面や帳票などになる。

エンティティ抽出のポイント

画面や帳票からデータ項目を抽出し、それらの意味を調べながら各データの関連を把握していく。ただ、すべての画面に対して行うのは現実的ではないため、データが集まっている画面や帳票にあたりをつけ、集中的に行うのが効率的である。関数従属性だけでなく、更新のタイミングなども踏まえてエンティティを切りだしていくのもポイント。

大まかには以下の流れになる。

  1.  まずは画面単位でエンティティをくくる
  2. 次に重複のない正式なデータ項目名を付与
  3. ドメイン(属性の取る値の範囲)を定義 2階層で定義するのがよい(大まかな分類(ドメインの種類)→具体的なドメイン
  4. 複数の画面から、ひとつのエンティティを抽出している場合は、重複する項目を取り除く
  5. エンティティと属性の関係が正しいか見極め、ふさわしくない場合は新たにエンティティを定義する

主キーの選定

基本的にトップダウンと同じだが、代替キーもここでは採用する。

エンティティの正規化作業

まずは第一正規化して繰り返し項目を除外する。

次に第2正規化を行う。正規化したエンティティが定義済の場合は、リレーションシップを設定して属性を削除すれば終了となる。

さらに第3正規化を行う。対象エンティティの主キー以外で決定出来る項目を外出しする。このとき、キーが未定義である場合、定義する。

導出項目は、エンティティを説明する役割もあるので、分析段階ではあまり削除しない。エンティティ内の属性のみで計算可能なものは削除し、他のエンティティのものをまとめて計算するものは残すなどの指針を設けておく。

また、正規化には意味を考えた正規化もある。更新のタイミングが異なる属性集合がある場合、エンティティとして外出ししてもよい。

エンティティの統合 

トップダウンボトムアップで作成したエンティティを統合していく。統合の順は、エンティティの併合、主キーの統合、リレーション付けの順で行う。

 

参考文献

実践的データモデリング入門 (DB magazine selection)

実践的データモデリング入門 (DB magazine selection)