SQL Server birçok aptalca şey yapmanıza izin verir.
Kendini referans alan bir sütunda yabancı bir anahtar bile oluşturabilirsiniz - her satır kendi üzerindeki kısıtlamayı karşılayacağından bunun asla ihlal edilemez olmasına rağmen.
Aynı ilişkide iki yabancı anahtar oluşturma yeteneğinin potansiyel olarak yararlı olacağı bir uç durum, yabancı anahtarları doğrulamak için kullanılan dizinin oluşturma zamanında belirlenmesidir. Daha iyi (yani daha dar) bir dizin daha sonra gelirse, bu, daha iyi dizine bağlı yeni bir yabancı anahtar kısıtlaması oluşturulmasına izin verir ve ardından orijinal kısıtlama, etkin kısıtlama olmadan herhangi bir boşluk olmadan düştü.
(Aşağıdaki örnekte olduğu gibi)
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;
Ara dönem için bir kenara bırakılırken, her iki kısıtlama mevcutken, herhangi bir kesici uç her iki endekse karşı da geçerlilik kazanır.