Microsoft SQL Serverでは、テーブルを作成するときに、実際には一意にする必要がないにもかかわらず、列に一意制約を使用することには何らかの欠点がありますか?必ずしも必要ではないにもかかわらず、テーブル内のユニーク制約を使用する必要がありますか?
の例では、ユーザー管理システムにおける役割と言うの説明のようになります。
CREATE TABLE Role
(
ID TINYINT PRIMARY KEY NOT NULL IDENTITY(0, 1),
Title CHARACTER VARYING(32) NOT NULL UNIQUE,
Description CHARACTER VARYING(MAX) NOT NULL UNIQUE
)
私の恐怖は、他のテーブルで頻繁に挿入を行うときに、この制約を有効にすると、非常に時間のかかるプロセスになるということです。この制約がどのように検証されるかはわかりませんが、非常に効率的なやり方で、あるいは線形比較として行うことができるようです。
私はMicrosoft SQL Server 2008 R2が実際にSQL Serverの構文であると主張します。 –
あなたは正しいですが、元の投稿は無意味です。このテーブルの列を参照するFKがある場合、他のテーブルの挿入はこのテーブルにのみ影響します。その場合、FKはPKまたは固有の制約がこれらの列に存在することを要求します。その答えは、制約チェックを可能にする(そしてスピードアップする)固有の制約を避けることはできません。 – JotaBe
@Michael J. Gray:構文はSQL Server 2008 R2で機能しますが、(最大)列に一意のインデックスを作成することはできません。 – JotaBe