主キー制約よりUNIQUE制約を使用するメリット
UNIQUE制約を作成することにより、SQL Serverの管理者は、列に重複値が含まれないことを指定します。 新しいUNIQUE制約を作成すると、SQL Serverはその列をチェックして、重複する値が含まれているかどうかを判断します。 表に既存の重複が含まれている場合、制約作成コマンドは失敗します。 同様に、列に対してUNIQUE制約を設定すると、重複の原因となるデータの追加または変更も失敗します。
UNIQUE制約を使用する理由
UNIQUE制約と主キーの両方が一意性を強制しますが、UNIQUE制約がより良い選択である場合があります。
- テーブルに複数の制約が必要な場合は、UNIQUE制約を使用します。 主キーは1つの表にのみ添付できます。
- 列がNULL値を許可する場合は、UNIQUE制約を使用します。 主キー制約は、NULL値を許可しない列にのみ添付できます。
UNIQUE制約の作成
SQL ServerにUNIQUE制約を作成する方法はたくさんあります。 Transact-SQLを使用して既存のテーブルにUNIQUE制約を追加する場合は、次のようにALTER TABLEステートメントを使用できます。
ALTER TABLE ADD CONSTRAINT UNIQUE()を追加します。GUIツールを使用してSQL Serverと対話したい場合は、 SQL Server Management Studioを使用してUNIQUE制約を作成することもできます。 方法は次のとおりです。
- SQL Server Management Studioを開きます。
- 制約を作成するデータベースのTablesフォルダーを展開します。
- 制約を追加するテーブルを右クリックし、[ 設計 ]をクリックします。
- [テーブルデザイナ]メニューの[ インデックス/キー ]をクリックします。
- [インデックス/キー]ダイアログボックスで、[ 追加 ] をクリックします。
- TypeドロップダウンリストでUnique Keyを選択します。
ユニーク制約とユニークインデックス
UNIQUE制約とUNIQUEインデックスの違いについては、いくつかの混乱がありました。 異なるTransact-SQLコマンドを使用してそれらを作成することもできます(制約の場合はALTER TABLE ... ADD CONSTRAINT、インデックスの場合はUNIQUE INDEXを作成します)。ほとんどの場合、同じ効果があります。 実際、UNIQUE制約を作成すると、実際にはその表にUNIQUE索引が作成されます。 しかし、いくつかの違いがあることに注意することは重要です。