1

2 つの質問があります。標準の ASP.NET メンバーシップを使用する ASP.NET Web アプリケーションを開発しています。メンバーシップ テーブルを 1 つのデータベースに含める予定です。2 つの異なるアプリケーションのデータを保存する 2 つのデータベースがあります。

Shared - Membership info
DB1 - Application1
DB2 - Application2

どちらのアプリケーションも、「共有」データベースのメンバーシップ情報を使用します。共有データベースには、名前、電話番号、役職などの追加のユーザー情報を格納する userdetals というテーブルがあります。

ただし、DB1 には、名前、電話番号、および役職と同じフィールドを格納する employees というテーブルもあります。各従業員はユーザーである場合があります。

また、DB1 と DB2 の各テーブルについて、監査トライアル、つまりデータベース内のテーブルを更新したユーザーを記録します。したがって、DB1 と DB2 のテーブルに UserID を格納する必要があります。DB1 と DB2 にユーザー テーブルを追加することを考えました。そのため、Shared で新しいユーザーが作成されるたびに、同じユーザーが DB1 と DB2 の Users テーブルに作成されます。

私たちの質問は次のとおりです。

  1. 上記の設定でデータベースの整合性を維持する最善の方法は何ですか? 例: 各従業員はユーザーとして割り当てられます。ユーザー名、名前、電話番号などの DB1 のフィールドが更新された場合は、共有 DB の同じフィールドも更新する必要があり、その逆も同様です。

  2. この場合、メンバーシップ データベースを別のデータベースに置くことをお勧めしますか? DB1 と DB2 のほとんどすべてのテーブルが共有データベースのユーザー ID を参照するため、最適なソリューションは何ですか。

4

2 に答える 2

2

1. 探しているテクノロジはマージ レプリケーション ( http://bit.ly/KUtkPl ) です。基本的に、両方のデータベースに共通のユーザー テーブルを作成し、一方のアプリケーション データベースにマージ レプリケーションパブリッシャを作成し、もう一方のアプリケーション データベースにマージ レプリケーションサブスクライバを作成します。スキーマを同期するようにこれを設定することもできます (つまり、パブリッシング データベースでテーブルを 1 回だけ作成する必要があることも意味します。これにより、データを含むテーブル、スキーマがサブスクライバーにプッシュされます)。

しかし、より手動のアプローチを探している場合は、ユーザー データを従業員テーブルに非正規化せず、代わりに各アプリケーション サーバーに補助テーブルとビューを作成します。OOP での継承のようなもの: Employee テーブルと Users テーブルの間の共通データは、共有ユーザー テーブルに残します。従業員の一意の列は、補足テーブルのみに追加され、各データベースに保存されます。ビューは、補助テーブルと共有テーブルの両方をマージします。( http://bit.ly/9KPxt0 )

レプリケーション サービスを使用する場合でも、同期テーブルでこのビュー デザインを使用します。

ビューを介して更新できますが、お勧めしません。以前は本番環境で成功していましたが、爆発する可能性のある制約が多すぎます ( http://bit.ly/LJCJev )。代わりに、データを保持するテーブルを直接更新します。

「同期するトリガー」は絶対に避けてください。リスクが高すぎ (SQL サーバーで初期ループが発生する可能性があります)、メンテナンスのオーバーヘッドが多すぎます。

2. マージ レプリケーションを実行します。正しく構成された後は、心配したり維持したりする必要がなくなります。ただし、より手動のものが必要な場合、または SQL のレプリケーション サービスに慣れていない場合は、このアプローチで問題ありません。上記のビューを使用するだけで設定できます。

于 2012-05-27T23:22:23.007 に答える
0

簡単な方法:

これらのデータベースへのリンク サーバーを作成できます。次に、各データベースのテーブルに簡単にアクセスできるシノニムを作成します。各テーブルでデータが更新されたときに、データを更新するトリガーを作成します。

于 2012-05-28T12:24:06.923 に答える