一意の制約は、一意のインデックスとしてバックグラウンドで実装されるため、どのように指定するかは重要ではありません。私はそれを単純に次のように実装する傾向があります:
ALTER TABLE dbo.foo ADD CONSTRAINT UQ_bar UNIQUE(bar);
代わりに、一意のインデックスを作成する人もいます。例:
CREATE UNIQUE INDEX IX_UQ_Bar ON dbo.foo(bar);
違いは意図にあります。一意性/ビジネスルールを適用するための制約を作成する場合は制約を作成し、クエリのパフォーマンスを支援するために作成する場合は、一意のインデックスを作成する方が論理的である可能性があります。繰り返しになりますが、内部では同じ実装ですが、そこにたどり着くまでの道のりは、意図を文書化するのに役立つ場合があります。
以前のSybase機能とANSI標準の両方に準拠するための複数のオプションがあると思います(一意の制約は1つのNULL値(一意のインデックス)しか許可しないため、標準の100%に準拠していませんが、一方、WHERE
を追加することで、これを回避できます。 句(WHERE col IS NOT NULL
)SQL Server 2008以降)。