私は、(主に) SQL Server (2000)、ColdFusion (8)、および一部の Access/.NET アプリケーションに基づく金融サービス業界のプロジェクトに取り組み始めました。このプロジェクトは、いくつかの単純な Access フォーム/VBA として開始され、ゆっくりと Web インターフェイスに変換されました。
データベースの設計とアプリケーションのコーディングは、仕事で学んでいて、最初から優れた設計原則について学ぶ機会がなかった人々によって行われたと言えます。ビジネス ルールの多くは、無数のカスケード関数とストアド プロシージャ、および Web サーバー テンプレートで設定されます。コメント化されていない定数を使用する複雑な 500 行の SQL UDF の奥深くには、膨大な量の特殊なケース処理があります。クエリに関係する可能性のある 10 ~ 20 個の UDF 間の相互作用をすべて追跡することは非常に困難です。一部のクエリは、実行に時間がかかりすぎるようです (最大 15 分)。
テーブルは十分にインデックス化されていますが、FK リレーションシップがなく、参照整合性がほとんどありません。DB は、少量の毎日のバッチ (複数のテーブルに 1,000 レコード) で頻繁に更新されません。主に、データ リポジトリとして機能するために使用されます (データ ウェアハウスだと思います)。デッドロックや遅延が発生することはほとんどありません。
それで、私の質問は次のとおりです。データベースとフロントエンドを含むプロジェクト全体を再実装したい場合、非リレーショナル実装を検討するのは理にかなっていますか? プライマリ DB は約 1GB (.mdf) しかないため、メモリに簡単に収まります。SQL クエリ構造から、効率的にコンパイルおよび実行できる宣言型モデルに移行したいと考えています。必要に応じて、SQL DB を単なるデータ ストアとして使用できます。