NULL 列に一意のインデックスを作成する
NULL 値を許可する列には一意制約を適用できないという一般的な誤解にもかかわらず、実際には方法があります。 SQL Server でこれを実現するには2005.
アプローチ 1: 一意のインデックスを持つビュー
質問で言及されているアプローチでは、ビューを利用して NULL を除外し、そのビューに一意のインデックスを作成します。このソリューションは効果的ではありますが、複雑さとパフォーマンスのオーバーヘッドが追加されます。
アプローチ 2: フィルターされたインデックス (SQL Server 2008 )
SQL Server 2008 を導入すると、フィルターされたインデックスを使用して次のことを指定できます。インデックスを作成するときの WHERE 句。これにより、NULL を含む可能性のある列に一意のインデックスを作成できます。
構文:
CREATE UNIQUE INDEX AK_MyTable_Column1 ON MyTable (Column1) WHERE Column1 IS NOT NULL
アプローチ 3: トリガーベースの強制
もう 1 つの方法は、行が挿入または更新されるたびに一意性をチェックするトリガーを実装することです。ただし、トリガーは、特に挿入/更新率が高いテーブルのパフォーマンスに影響を与える可能性があります。
実装:
CREATE TRIGGER MyTable_TRG_Unique ON MyTable AFTER INSERT OR UPDATE AS BEGIN IF EXISTS(SELECT 1 FROM MyTable WHERE Column1 = (SELECT Column1 FROM INSERTED)) BEGIN RAISERROR('Column1 must be unique.', 16, 1); -- Handle error as needed END END
特定の要件とパフォーマンスの制約に基づいて、各アプローチの長所と短所を検討してください。アプリケーションの
以上がSQL Server で NULL 値を許可する列に一意のインデックスを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。