SQL Server memungkinkan Anda melakukan banyak hal konyol.
Anda bahkan dapat membuat kunci asing pada kolom yang mereferensikan sendiri - terlepas dari kenyataan bahwa ini tidak akan pernah bisa dilanggar karena setiap baris akan menemui kendala pada dirinya sendiri.
Satu kasus tepi di mana kemampuan untuk membuat dua kunci asing pada hubungan yang sama akan berpotensi bermanfaat adalah karena indeks yang digunakan untuk memvalidasi kunci asing ditentukan pada waktu pembuatan. Jika indeks yang lebih baik (yaitu lebih sempit) muncul kemudian maka ini akan memungkinkan batasan kunci asing baru dibuat terikat pada indeks yang lebih baik dan kemudian kendala asli turun tanpa ada celah tanpa kendala aktif.
(Seperti dalam contoh di bawah ini)
CREATE TABLE T1(
T1_Id INT PRIMARY KEY CLUSTERED NOT NULL,
Filler CHAR(4000) NULL,
)
INSERT INTO T1 VALUES (1, '');
CREATE TABLE T2(
T2_Id INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
T1_Id INT NOT NULL CONSTRAINT FK REFERENCES T1 (T1_Id),
Filler CHAR(4000) NULL,
)
ALTER TABLE T1 ADD CONSTRAINT
UQ_T1 UNIQUE NONCLUSTERED(T1_Id)
/*Execution Plan uses clustered index*/
INSERT INTO T2 VALUES (1,1)
ALTER TABLE T2 WITH CHECK ADD CONSTRAINT FK2 FOREIGN KEY(T1_Id)
REFERENCES T1 (T1_Id)
ALTER TABLE T2 DROP CONSTRAINT FK
/*Now Execution Plan now uses non clustered index*/
INSERT INTO T2 VALUES (1,1)
DROP TABLE T2, T1;
Sebagai tambahan untuk periode sementara sementara kedua kendala ada setiap sisipan akhirnya divalidasi terhadap kedua indeks.