1

多くのサーバーに複製する必要があるアプリケーションを構築しています (そうでないことを願っていますが、オンライン製品をリリースするまで、クライアントが独自のクライアント/サーバー コピーを必要とするかどうかを知る方法はありません)。

サーバーの数が不明であるため、すべてのトランザクション テーブル ID に GUID を使用することにしました。各クライアントには独自のデータベースがあるため、NEWSEQUENTIALID() のデフォルトを使用するつもりであり、最大のテーブルは年間 150 万行しか追加しません (平均で 15,000 行)。パフォーマンスの問題はあまりないと思います。 .

ただし、外部キーに「選択されていない」ことを示す必要がある場合の処理​​方法がわかりません。たとえば、クライアントには 1 人の管理者ユーザーがいます。これは、login.id (GUID) への外部キー (login_id) として設定されます。ただし、クライアントにまだ管理者ユーザーがいない場合、「None Selected」キーを簡単に設定するにはどうすればよいでしょうか?

以前のアプリケーションでは、IDENTITY 列を使用し、ほとんどのテーブルに ID 0 のダミー エントリを挿入していました。GUID で同様の機能を提供するための受け入れられたアプローチはありますか?

4

4 に答える 4

4

これを行う唯一の安全な方法は、FK 値を NULL に設定することです。複数のサーバー間でデータをレプリケートする必要がある場合は、レプリケートする各テーブルに主キーとして GUID があることを確認してください。これにより、外部キーの関係が問題になることはありません。

レプリケーションはこの方法で非常に簡単に行うことができます。最初に親テーブルから子テーブルへの順序で挿入と更新をレプリケートし、その後、削除されたレコードを子テーブルから親テーブルへレプリケートします。(逆順です。)

お役に立てれば。

于 2009-03-07T23:17:58.887 に答える
1

ここで本当に明らかな何かが欠けているかもしれませんが、NULLに設定することはできませんか?

于 2009-03-07T20:33:13.447 に答える
1

子テーブルの外部キー フィールドを NULL 可能にし、管理者ユーザーがいない場合はフィールドを NULL のままにします。「0」ID 列のような魔法の値は、発生するのを待っている災害です。

于 2009-03-07T20:33:33.023 に答える