まず、この問題は非常に難しく、完全な答えが見つからない可能性があることをお伝えしたいと思います。
最近、私はレガシー基幹業務アプリケーションの保守に携わっていますが、これはまもなく新しいバージョンに進化する可能性があります。メンテナンスには、バグの解決、古いコードの最適化、および新しい機能が含まれますが、これらは現在のアプリケーション アーキテクチャに簡単に収まらない場合があります。私たちのアプリケーションの主な問題は、文書化が不十分であり、変更の痕跡がなく、基本的にこのプロジェクトに取り組んでいる 5 番目のローテーション チームです (私たちはかなり新しいプロジェクトです)。
外部の詳細 (コード、レイヤーなど) は脇に置いて、現在データベースの変更をどのように管理しているかを少し説明します。
現時点では、従おうとしている 2 つのルールがあります。
第一に、古いコード (SQL、ストアド プロシージャ、関数など) はそのまま機能し、場合 (バグや機能の変更) がない限り、あまり変更せずにそのまま保持する必要があります。もちろん、それを文書化するようにしてください。可能な限り(特に、「なんてこった!、なぜ彼はそれの代わりにそれをしたのですか?」のような問題)。
2 つ目は、登場するすべての新機能は、現時点で知られているベスト プラクティスを使用し、古いデータベース構造をできるだけ変更しないようにすることです。これにより、古い構造の上に編集可能なビューを使用したり、既存のテーブルに新しい拡張テーブルを導入したり、構造を正規化したり、ビューを介して古い構造を提供したりするなど、いくつかのデータベース リファクタリング オプションが導入されます。
また、ビジネス アナリストが並んで作業し、ビジネス ルールを文書化しているという条件で、できるだけ多くの単体テストを記述しようとしています。
データベースのリファクタリングは非常に複雑な分野であり、簡単に答える必要があります。すべての問題に答える本がたくさんあります.1つは http://databaserefactoring.com/が答えの1つに示されています.
後で編集: うまくいけば、2 番目のルールも重大な変更の処理に対応します。