🐶

0からデータモデルを作る流れ 2024

2024/08/12に公開

よくある既存のモデルをベースにそこからデータモデルを作る方法ではなく
0から作る時の流れ

仕様を書く

  • 入力
  • 参照
  • 処理概要
  • 出力

の4つを書くように仕様を書く

AmazonとかのECだと
商品情報をみて、商品情報と数量とカートに入れる
みたいに書くと

  • 入力は商品情報と数量
  • 参照は商品情報
  • 処理概要はカートに入れる
  • 出力はカート

こんな感じでざっくり分解できる
あとから分解できるように必要なだけ仕様を書いていく
この段階で処理概要の所はあんまり細かく書かない(あとで考えれば良い

実際のプロダクトを考慮するなら「誰が」とか「どのロールの人が」みたいな情報があると良い
(データモデルを作るだけなら余り考慮しなくていいので省略

データ候補を取り出す

  • 参照
  • 出力
  • 入力

これがデータ候補そのもの(優先度順
ただし、この時点ではデータとして扱うかどうかは決まらない

データ候補と処理を再度マッピングする

複数の表現で扱われる同じデータが無いかとか
同じ表現で扱われる異なるデータが無いかとか
を確認しつつ、名前を調整する(この辺で名前に合わせて仕様も変えておく

仕様を大まかに並び替えていく

先に無いと成立しないものを前に並べる
たとえば商品情報が無いとカートに入れれないという制約があるなら
商品情報の登録の後にカートの操作が来るように並べる
注文するときにはカートが必須なら注文処理の前にはカートを置く
みたいに仕様を並び替えていく
ちなみに、これが業務の大ざっぱな流れに繋がる

業務の流れで直接関連するデータ同士に関連を付ける

商品情報とカートみたいに関連があるものに関連を付ける
この辺りで1:Nみたいな関係がハッキリしてきたらそれを細かくする
商品情報をカートに入れるのは実際はカート明細みたいな関係になる
ついでに仕様を書き換えて仕様の記述から安定するまでやり直す

ここで、カート明細から見て商品情報は1つみたいなN:1の関係性が業務の流れの中で生み出される
1:NとかN:1はこの辺でハッキリしていけばOK

データモデルが状態と1:1か1:0になるよう且つ、多すぎない状態を持つように分割する

一つのデータモデルが状態を最大1つ持つ様にする
または持つ状態は可能な限り減らす(理想は5〜7個より小さい程度)
状態が多い場合は、そのモデルは責務が多い可能性があるので
紐付く業務のうち直接関連しないものをグルーピングして名前を付けてデータ候補として切り出す
ここでまた仕様を書き換えて、記述が安定するまでやり直す

集約モデルを用意する

ここまでモデルの分割をメインにしてきたため
利用者的に1つのモデルが複数のモデルに分割されていることが起きているはずなので
複数のモデルを集約した一つのモデルを用意する
このモデルの計算量が小さい場合はViewとして作る
計算量が多い場合は更新タイミングを調整しつつデータモデルとして用意する
状態についてもある程度集約した名前を付与する(このモデルは状態遷移を持たない)

コード体系を考える

RestfulなURLへのマッピングを考えた場合、コード体系が存在した方が綺麗に作れるためコード体系を考えておく
コード体系はURLで表現しやすく、かつ人が把握できる物が理想
綺麗なURLへのマッピングなどが不要な場合はこの工程は不要

N:1のデータモデルの関係の中で業務上含めて強い依存があり
その関係性がほぼ不変の場合
(たとえば、住所の都道府県と市区町村みたいな関係
1側の主コードをN側の主コードに持たせる

項目を追加していく

ほぼデータモデルとして決まっているはずなので、業務上必要な項目を追加する

完了

あとはDB設計に変換したりしていく
このときにはコード体系で扱わず、DB的にはサロゲートキー項目で扱う方が各種ツールで扱いやすくなるのでお勧め

Discussion