私はプログラミングに不慣れな同僚と仕事をしていて、ORM(およびSRP)の概念のいくつかを説明しようとしていますが、どういうわけか失敗しています。これはRailsアプリです。
私が作業しているアプリケーションのクラス階層は次のようになります。
-CallFlow --Route
(polymorphic)
--- RouteOptions
さまざまなルートに固有の属性があり、各RouteTypeには独自のオプションのセットがあります。理想的には、call_flowsのテーブル、各ルートタイプのテーブル、そしてオプションのあるルートタイプのテーブル、そのルートタイプのオプションテーブルがあります。本当にラフなモックアップ:
Simple_routeとoutbound_routeにはオプションがありません。オプションがあるルートのうち、それはhas_many関係であり、そのルートのオプションの配列を提供します。
逆に、私の同僚は、各ルートに固有のすべてのフィールドをcall_flowsテーブルに配置したいと考えています。これはそのモードのモックアップです:
したがって、すべてのレコードに適用されるわけではないフィールドを持つ1つの大きなcall_flowsテーブルがあります。実際、ほんの一握りの意志だけです。モデリングの決定の背後にある私の理由は次のとおりです。
- 基本的な正規化パターンに従います
- null値の量が減り、データベースのサイズが減ります
- 変更する方が柔軟です
- 基本的なSRPの原則に従います
私は何かが足りないのですか?新しいプログラマーがDBの正規化の重要性を理解するのに役立つリソースがあればいいのにと思います。
ありがとう!