テーブル設計の表現力

テーブル設計について学んだ。

テーブルの表現って??単に、正規化を行って、1対多や多対多を意識して実装すれば全て解決うまく解決する? 答えはNo..  例えばハンバーガー屋で商品テーブルからいろいろ組み合わせてオーダーしたい場合は?? userがいて登録userと未登録userに振り分けたい場合は?? などなどシステムのusecaseで色々と要件が出てくる。 これをただ、正規化して、1対多や多対多に設計や状態を管理するフラグカラムを立てて、対応できるか??

対応できません!!! (多分ですが)

テーブル設計の表現力を高めていくしかない!!!

どう表現力を高めるの???

オブジェクト思考を思い出してみよう。(コード内容はご愛嬌。。)

<?php

interface User {
  public function order();
}

//具象化する
class RegisteredUser implements User {
        public function order() {}
}

class AnonymousUser implements User {
        public function order() {}
}

// Userインターフェースを型に受けることで、対象のUserを意識しなくてよい。
class Order {
     private string $name;
     
     public function exec(User $user) {
            $user->order()
   }
}

抽象化することで、同じuserでも別々のuser を作ることができる。

それを使う側は特にどんなUserかは意識はしなくて良くなった。

これをテーブルに当てはめてみると!

userというテーブルがあり、それぞれに分岐した各userが存在する。かたやuserに紐付いているorderはuserがどっちのuserかは意識しなくて良くなった。

なんか疎結合にデータが管理することができる気がする!

どうやら、こういった設計パターンがあるらしい。 吸収して、自分の引き出しを広げる取り組みを行って行かなければ。

テーブル設計にもいろんなパターンがあるんと、すごく感動しました!! 今度はイミュータブルデーモデリングを学習しま〜す。

次こそ、監視について記事書かなきゃ。。。