私は半ダースのDBで作業しています。DB はすべて同じスキーマ、同じ SP などを持っています。最初に DB を設計した人に話すと、多くの DB を使用する動機の大部分は効率でした。別の方法は、データベース内のほぼすべてのテーブルと sp に列を追加して、どのデータセットが処理されているかを示し、複数の小さな DB ではなく 1 つの巨大な (したがって低速な) DB を作成することです。クエリ対象のデータ セットを示す列を使用する代わりに、接続文字列を使用して、ヒットするデータベースを選択します。
私がこの組織を本当に嫌いな唯一の理由は、コードの重複が多く、メンテナンスに負担がかかるからです。たとえば、ストアド プロシージャを変更するたびに、すべてのデータベースで alter ステートメントを実行する必要があります。
私が検討した解決策の 1 つは、すべてのデータを 1 つの大きなデータベースに結合し、結合しなかった場合にデータがどのデータベースに存在するかを示す列をあちこちに追加することです。次に、この列の値ですべてのテーブルを分割できます。理論的には、これらすべての結果として、すべてのデータ自体の基本的な表現は、現在と道徳的に同じになりますが、インデックス、スキーマ、SP などの冗長性はありません。
私の質問はこれです:
- これは良い考えですか?これを達成するためのより良い方法はありますか?
- これを行う際に落とし穴はありますか?
- これはパフォーマンスに影響を与えますか?