3

お客様のサイトに実装される 2 つの製品があり、そのうちの 1 つは他の存在を必要とします。アドオンが必要とするデータベース オブジェクト用に、主要製品と同じデータベース内に別のスキーマを実装しました。アドオンは理論的には将来の製品にもアドオンになる可能性があるため (現時点では何も計画されていません)、その決定を再検討しています。現在は 2005 を使用していますが、1 年ほどで 2008 R2 または Denali に移行する予定です。

1 つの要因は、プロジェクト スキーマを別のスキーマを含むデータベースと比較するときに、VS プロジェクトのビューを 1 つのスキーマに制限できないため、個別の VS 2010 データベース プロジェクトで個別のスキーマを維持することが難しいことです。

2 つのスキーマが常に同じ SQL Server インスタンスにあると仮定して、2 つのスキーマを別々のデータベースに分割しないようにする理由はありますか?

バックアップは、インスタンス内のすべてのデータベースで動作するスクリプトによって処理されるため、問題はありません。将来的にはホステッド(SaaS)ベースで提供したいと考えているため、マルチテナンシーへの影響が要因です。インスタンス内で複数の顧客をホストする可能性があります。

4

4 に答える 4

4

2 つの別々のデータベースにある場合、トランザクションの一貫性は得られません。HA/DR メカニズムによっては、データベースが同期しなくなる場合があります。たとえば、データベース ミラーリングを使用すると、適用されるトランザクション ログに関して、あるデータベースが他のデータベースよりもはるかに優れている場合があります。一方のデータベースはミラー上で午前 10 時まで最新である可能性がありますが、もう一方のデータベースは午前 9 時 55 分までしか最新ではない場合があります。フェールオーバーが発生すると、2 つのデータベースが同期されなくなります。

于 2011-06-20T14:05:27.300 に答える
2

同じデータベースでは外部キー制約を適用できますが、トリガーを書き込まずに個別のデータベースでは実行できないことに注意してください。

于 2011-06-20T21:46:54.620 に答える
0

スキームの代わりにデータベースにデータを分割するという決定は、そのような製品が常に一緒に使用され、他の方法がないかどうか、つまり、そのような製品を1つとして考えることが理にかなっているのか、またはそれらが2 つのまったく異なる製品が一緒に使用されています。

将来的には他の製品にもアドオンを使用する予定だとおっしゃっているので、最善の解決策はデータを別々のデータベースに分割することだと思います。なぜなら、後でこれらのシナリオの少なくとも 1 つに直面するからです。

  • 別の製品のアドオンをインストールすると、現在の製品の情報 (少なくとも db スキーマ) が含まれています。
  • 他の製品ごとに、毎回個別のアドオン データベースをインストールする必要があります。

これらのそれぞれが維持するのを難しくしています...したがって、言及したシナリオではデータベースを分離することをお勧めします。

于 2011-06-20T14:05:51.650 に答える
0

両方のモデル (別のスキーマと別のデータベース) に対して、アプリケーションのアプリケーション パフォーマンスを (厳しく!) テストする必要があります。一方が受け入れられない場合は、もう一方を使用してください。言うまでもなく、あるフォームを他のフォームよりも使用する唯一の真に説得力のある理由は、あなたが説明する「アドオン」機能に関係しています。これが複数の異なるシステムへの「アドオン」になる可能性がある場合、インストールされサポートされているすべての「ベース」アプリケーションで単一のアドオン インスタンスを使用する場合は、その機能をカプセル化する必要があります。独自のデータベース インスタンスを作成し、そのようなインスタンスのいずれかまたはすべてで共有/アクセスできるようにします。

思考の練習として、アドオン機能を「最初の」アプリケーション インスタンスにのみ格納し、そのコードをその後にインストールされたすべてのインスタンスで参照するようにしたい (または持っていた) 場合、それをサポートするソリューションは以下に基づくことができます。シノニム(SQL 2005 で導入)。「ベース」アプリのインストール時に、「アドオン」コードが見つかったかどうか、どこで見つかったかを確認する必要があり、見つかった場合は、ホスティング データベースを参照して必要な類義語が構築されます。アドオンをインストールするときに、サポートされているすべてのデータベースを識別して更新するには、同様のインストール ルーチンが必要です。(興味深いアイデアですが、長期的な保守と管理に関しては、別のデータベースの方が優れたソリューションです。)

于 2011-06-20T14:12:29.557 に答える