1

他の 2 つのビジネス モデルの関連付けを説明する表があります。

例:

Construction Table - available constructions |
Reader Table - available readers |
ReaderPlacement Table - reader assigned to specific construction for specific time.

私の要件によると、ReaderPlacementテーブルには が含まれている必要がありますApiKey。私にとって、ベストマッチは一意であり、GUID後で WCF 通信に使用されます。

次のようなものを書く予定です。

ApiKey CHAR(36) NOT NULL DEFAULT NewSequentialId()

それは正しい解決策ですか?NewSequentialId()私はそれがより優れておりNewId()、ユニークであるべきだと読みました。

データベースエンジンは、使用時に列が一意になるように保護しますNewSequentialId()か、または制約と追加のチェックを追加する必要がありますか?

SQL Azure でも有効である必要があります。

乾杯、ダニエル

4

1 に答える 1

1

デフォルトの を定義しただけでは、重複がないという保証newsequentialid()はありません。はい。SQL Server によって生成される値は、一意である可能性が非常に高くなります。しかし、そのデフォルトの制約は、明示的な値の挿入を妨げるものではなく、既存の値と衝突する可能性があります。

ApiKeyが常に一意である必要がある場合は、一意の制約を追加する必要があります

ALTER TABLE dbo.ReaderPlacement
ADD CONSTRAINT UC_ReaderPlacement_ApiKey UNIQUE(ApiKey)

この一意の制約 (SQL Azure でも確実に機能するはずです) を使用すると、SQL Server は重複が挿入されるのを防ぎます。重複を挿入しようとするトランザクションは、エラー メッセージで終了します。

于 2012-05-18T14:38:58.003 に答える