SQL Server ช่วยให้คุณทำสิ่งที่โง่มาก
คุณสามารถสร้างคีย์ต่างประเทศในคอลัมน์ที่อ้างอิงตัวเองได้แม้ว่าข้อเท็จจริงนี้จะไม่ถูกละเมิดเนื่องจากทุกแถวจะตรงกับข้อ จำกัด ของตัวเอง
กรณีขอบหนึ่งกรณีที่ความสามารถในการสร้างสองคีย์ต่างประเทศที่มีความสัมพันธ์แบบเดียวกันอาจเป็นประโยชน์อาจเกิดขึ้นได้เนื่องจากดัชนีที่ใช้สำหรับตรวจสอบความถูกต้องของคีย์ต่างประเทศนั้นถูกกำหนดในเวลาสร้าง หากดัชนีที่ดีขึ้น (เช่นแคบลง) มาพร้อมกันในภายหลังสิ่งนี้จะช่วยให้มีการสร้างข้อ จำกัด คีย์ต่างประเทศใหม่บนดัชนีที่ดีกว่าและจากนั้นข้อ จำกัด เดิมจะลดลงโดยไม่มีช่องว่างที่ไม่มีข้อ จำกัด ที่ใช้งานอยู่
(ดังตัวอย่างด้านล่าง)
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;
ในฐานะที่เป็นกันสำหรับช่วงเวลาระหว่างที่ในขณะที่ข้อ จำกัด ทั้งสองมีอยู่แทรกใด ๆ ท้ายถูกตรวจสอบกับดัชนีทั้งสอง