概念エンティティの 2 つのセットがあるとします。
- 複数のForwardPriceEntriesを持つMarketPriceDataSet
- 複数のPoolPriceForecastEntryを持つPoolPriceForecastDataSet
両方の異なる子オブジェクトには、ほぼ同じフィールドがあります。
ForwardPriceEntry は
- 開始日
- 終了日
- SimulationItemId
- 前売り価格
- MarketPriceDataSetId (親テーブルへの外部キー)
PoolPriceForecastEntry には
- 開始日
- 終了日
- SimulationItemId
- 予測プール価格
- PoolPriceForecastDataSetId (親テーブルへの外部キー)
それらを個別のテーブルとしてモデル化した場合、唯一の違いは外部キーと価格フィールドの名前です。
ほぼ同一の 2 つのテーブルを 1 つにマージする必要があるかどうかについては、議論がありました。
これをモデル化するために私が考えたオプションは次のとおりです。
- それらを2つの独立した別々のテーブルとして保持するだけです
- 追加の「タイプ」フィールドと、いずれかの親テーブルへの外部キーに等しいparent_idを使用して、1つのテーブルに両方のセットを配置します。これにより、参照整合性チェックが犠牲になります。
- 追加の「タイプ」フィールドを使用して 1 つのテーブルに両方のセットを配置し、テーブルを結合する複雑なシーケンスを作成して、参照整合性を維持します。
私は何をすべきだと思いますか、なぜですか?
関連する場合と関連しない場合があるその他の情報:
2 つのデータ セットは大まかに関連しています。それぞれの 1 つのセットがバッチ処理のためにメモリに読み込まれ、場合によっては ForwardPriceEntries からコピーすることによって PoolPriceForecastEntries のセットが生成されます。
MarketPriceDataSetとPoolPriceForecastDataSetには異なるフィールドがあります。それらを 1 つのテーブルにマージすることは可能ですが、エントリの半分に意味のないフィールドが含まれることになります。