イミュータブルデータモデリングについて
どうもoreoです。
今回はWEB+DB PRESS Vol.130のイミュータブルデータモデル特集を読んだメモを記載します。主に自分用の記事ですが、データモデリングとは?どうやるの?といった方の参考になればと思います。
1 良いデータモデリングとは?
良いデータモデリングとは、モデリングの過程で考慮されていなかった要求の穴やエッジケースの発見につながるもの。データモデリングの本質的価値は、作成時により深く業務要求を分析し、顧客やチームとの対話を生むこと。その為、データモデルはソフトウェアエンジニアだけでなく関係者全員の理解のために、そこに隠れた曖昧さや要求を洗い出し、議論するために使う。
2 イミュータブルデータモデルとは?
モデルが複雑になる要因はデータの更新処理(CRUDのU)である。システムで扱う情報はモノ(リソース)とコト(イベント)に分類することができる。このイベントを極限までイミュータブルにすることで、拡張に対して開いているかつ修正に対して閉じている堅牢なモデルを作成できる。
3 エンティティについて
3-1 エンティティとは?
エンティティとはは、一つのものを識別するために何らかの識別子が存在し、これに関数従属(※)するいくつかの属性で構成されているもの。エンティティは、「1つのものである」かつ「他のものとは区別されて独立している」という要件を満たす。
※関数従属とは、識別子の値が決まると、属性の値も決定できること
3-2 エンティティの性質
「1つのもの」とは考えれば考えるほど境界が曖昧になるため、関係者間で「1つのもの」の共通認識を形成する必要がある。エンティティには以下3つの性質があり、関係者間で単一性(それが何を指しているのか?)、同一性(同じものは何か?)、カテゴリ(同じカテゴリのものか?)を議論することで、「1つのもの」の境界線が見えてくる。
単一性( Oneness)
- 何が一つのものであるか
- 何を指しているのかを明確かつ完全に説明すること
同一性(Sameness)
- 2つのものが同じであると、どういうときに言えるのか
- 同じ用語に対する相反する見解を調整すること
カテゴリ(Category)
- それは何であるか、どんな分類で識別されるのか
- 一つのものに正しい名前を割り当て、それがデータモデル上のエンティティ、関連、属性のいずれであるかを決定すること
4 イミュータブルデータモデリングの手順
4-1 エンティティの抽出
まずはエンティティの抽出を行う。具体的には要求を文章化し、そこから動詞や名詞に下線を引くと、それがエンティティと属性の候補になる。
またエンティティに名前をつける時は、下記のような用語辞書を作ってその組み合わせでエンティティ名や属性名を付けると一貫性のある命名ができる。
# | 和名 | 英名 | 短縮名 | 説明 |
---|---|---|---|---|
1 | 発注 | order | ord | 本システムで扱うすべての注文 |
2 | 商品 | product | - | 注文可能なすべての商品 |
3 | 在庫 | inventory | inv | 実在庫ではなく理論在庫 |
4-2 エンティティをイベントとリソースに分類する
4-1で洗い出したエンティティを、イベントとリソースに分する。判断のルールは日時属性を持てばイベントであり、持たなければリソース。4-1の抽出作業の時の動詞がイベント、名詞がリソースに大体なる。
4-3 イベントエンティティは日時属性を一つだけ持つようにする
イベントは事業活動の記録を意味し、イベントの発生した時刻が属性として必ず一つ存在する。もしイベントが複数の日時属性を持つ場合、複数の概念や責務が混在しているので、別イベントとして識別子、別エンティティに切り出す。これは「正規化」するのと同じ。
4-4 リソースに隠されたイベントを抽出する
リソースに変更日時や変更者などの属性を持たせたいかどうかを議論し、もしその必要があるならばそのリソースをイベントエンティティに変更する。データのライフサイクルに注目すると、切り出すべき属性が見えやすい。
4-5 非依存リレーションシップを交差エンティティで表す
最後にエンティティ間のリレーションシップに着目し、以下の整理を行う。
- リソースエンティティ同士で非依存(一方が存在していなくても他方は存在しえる)であれば、それらを交差エンティティ(※)とする
- イベントエンティティ同士では時系列の逆転した依存関係があれば、それを交差エンティティとする。
※交差エンティティは、いくつかのエンティティの関連を表すもの。多対多のリレーションシップを分解する時などに使うやつです。
5 最後に
データモデリングの大枠はわかったので、実践を繰り返してものにしたいと思います!また、WEB+DB PRESS Vol.130には、図を交えなながらイミュータブルデータモデリングの実践方法が記載されているので、気になった方が是非ご覧ください。
6 参考
Discussion