テーブル設計の表現力
テーブル設計について学んだ。
テーブルの表現って??単に、正規化を行って、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かは意識しなくて良くなった。
なんか疎結合にデータが管理することができる気がする!
どうやら、こういった設計パターンがあるらしい。 吸収して、自分の引き出しを広げる取り組みを行って行かなければ。
テーブル設計にもいろんなパターンがあるんと、すごく感動しました!! 今度はイミュータブルデータモデリングを学習しま〜す。
次こそ、監視について記事書かなきゃ。。。