ユーザーがあるシステムからデータを取得し、他のシステムに送信できるようにするシステムを設計しています。宛先システムの 1 つは洗練された SOA (Web サービス) を備えており、もう 1 つは入力用にフラット ファイルを受け入れるメインフレームです。
PublishEvent テーブルと PublishEventType テーブルを持つデータベースを作成しました。発行されるイベントのタイプに固有の正規化されたテーブルもあります。
また、正規化されたデータ テーブルの平坦化されたバージョンである「インターフェイス」テーブルもあります。エンド・ユーザーには、インターフェース表にデータを入れるプロセスがあります。正確なプロセスはわかりません。結果を SQL テーブルにエクスポートできるのは、ある種のレポート アプリケーションだと思います。次に、SSIS パッケージを使用してインターフェイス テーブルからデータを取得し、それを正規化されたデータ構造に配置して、PublishEvent テーブルに新しい行を作成します。私が最初にリレーショナル テーブルを見せたとき、彼らは非常に混乱しているように見えたので、フラット テーブルを使用します。
PublishEvent テーブルの新しい行を監視する Windows サービスがあります。Windows サービスはプラグインで拡張されます (MEF フレームワークを使用)。どのプラグインが呼び出されるかは、PublishEvent 行の PublishEventTypeID フィールドの値によって異なります。
PublishEventTypeID 1 は、1 セットのテーブルからデータを読み取るプラグインを呼び出し、SOA Web サービスを呼び出します。PublishEventTypeID 2 は、別のテーブル セットからデータを読み取り、メインフレームに送信されるフラット ファイルを作成するプラグインを呼び出します。
これは、「Database as IPC」アンチパターンを実装しているようです。メッセージング ベースのシステムを使用するように設計を変更する必要がありますか? データをフラット テーブルに入れ、次に正規化されたテーブルに入れるプロセスは冗長ですか?
編集:これは.NET 3.5で開発されています