現在、私はAccessで記述された醜いビジネスアプリケーションに座っています。このアプリケーションは、隔日でスプレッドシートを取得し、それをMDBにインポートします。私は現在、これを含む主要なプロジェクトをSQL Serverと.net、特にc#に変換しています。
この情報を格納するために、Master_Prodテーブルの親であるIDキーProdIDで結合されたMaster_ProdとMaster_Sheetを呼び出す2つのテーブル(ここではエイリアス名)があります。履歴を保存するためのテーブルがさらに2つあります。History_ProdとHistory_Sheetです。Master_Prodから拡張されたテーブルは他にもありますが、説明のためにこれを2つのテーブルに制限しています。
これはAccessで記述されているため、このファイルを処理するためのサブルーチンには、手動でコーディングされたトリガーが散らばっていて、これまでも常に苦労してきた履歴を処理します。これがデータベースサーバーに移行したことをうれしく思う理由の1つです。 RADツールではなく。履歴追跡を処理するためのトリガーを作成しています。
私の計画は、スプレッドシートをモデル化するオブジェクトを作成し、データを解析して、サーバーにデータを送信する前にクライアント側でLINQを使用してチェックを行うことです...基本的に、シート内のデータを一致するものと比較する必要がありますレコード(存在しない場合は、新しい)。いずれかのフィールドが変更されている場合は、更新を送信します。
もともと、この形式のスプレッドシートがすでにあるので、このプロシージャをIEnumerableリストを受け入れるある種のCLRアセンブリに入れたいと思っていましたが、最近、これがかなり重要なデータベースサーバーとペアになることを知りました。行き詰まりを非常に心配しています。
これは、CLRストアドプロシージャを使用する価値がありますか?データが入力される他のエントリポイントがあり、渡されたオブジェクトを指定してそれらを処理するプロシージャを構築できれば、潜在的なデータベースパフォーマンスを犠牲にして、アプリケーションから多くのビジネスルールを取り除くことができます。
基本的に、更新チェックをクライアントから取り除き、データベースに配置して、履歴トリガーを起動できるようにテーブルを更新する必要があるかどうかをデータシステムが管理できるようにします。
同じ方向に沿ってこれを実装するためのより良い方法についての考えはありますか?