バックエンド・API・データ · 中級
年数耐えるデータモデルを設計する
一行でいうと: 良いモデルはビジネスの現実を表し、最初に構築するよう求められた画面ではない。
エンティティから始める
世界にある物——顧客、注文、アイテム、支払い——とそれらの間の関係。ビジネスチームが話す言語に合う名前は無数の誤解を省く。
多対多の関係をテキストフィールドに平坦化するな。「コンマ区切りのタグ」はそれでフィルタリングする必要がある最初のときに痛く支払われる負債だ。
事実と状態を区別する
現在の状態は変わる。事実——起きた。注文は状態を持つ;支払いは起きたイベントだ。履歴を失うシステムは「あの日の価格は何だったか」などの基本的な質問に答えられない。
なので:お金と権限に触れるすべてのものについて、状態レコードの隣にイベントレコードを保持する。
常に価値があるフィールド
作成時刻と更新時刻、誰が実行したか、競合を検出するバージョンまたはスタンプ、回復が必要な場所でのハードデリートの代わりにソフトデリート。
さらに深く
モデルが変更する必要があるとき、削除より追加を好み、段階的な移行として変更を実行する。そして、モデルの決定を簡潔に文書化する——なぜ一つではなく二つのテーブルがあるか——なぜなら一年後には誰も覚えておらず、意図的なものを単純化する誘惑が大きいからだ。