คำตอบสำหรับคำถามของคุณมีเหตุผลไม่ใช่ทางกายภาพ - มูลค่าที่คุณค้นหาอาจเปลี่ยนแปลงด้วยเหตุผลทางธุรกิจ ตัวอย่างเช่นหากคุณจัดทำดัชนีลูกค้าตามที่อยู่อีเมลจะเกิดอะไรขึ้นเมื่อที่อยู่อีเมลเปลี่ยนแปลงไป แน่นอนว่าสิ่งนี้จะไม่นำไปใช้กับตารางการค้นหาทั้งหมดของคุณ แต่ข้อดีของการทำเช่นนี้ในแอพพลิเคชั่นทั้งหมดก็คือมันทำให้โค้ดของคุณง่ายขึ้น หากทุกอย่างเป็นจำนวนเต็ม→ความสัมพันธ์จำนวนเต็มภายในคุณจะได้รับความคุ้มครอง
เพิ่งอ่านความคิดเห็นของคุณต่อ Sandy - ในกรณีนี้สิ่งที่คุณต้องการจริงๆคือข้อ จำกัด ในการตรวจสอบไม่ใช่ตารางคีย์ / การค้นหาจากต่างประเทศเช่น:
create table icecream (flavour varchar(10))
go
alter table icecream add constraint ck_flavour check (flavour in ('Orange', 'Pista', 'Mango'))
go
insert into icecream (flavour) values ('Orange')
go
insert into icecream (flavour) values ('Vanilla')
go
เรียกใช้สิ่งนี้และคุณจะได้รับ:
(1 row(s) affected)
Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the CHECK constraint "ck_flavour". The conflict occurred in database "GAIUSDB", table "dbo.icecream", column 'flavour'.
The statement has been terminated.
นี่เป็นวิธีที่มีประสิทธิภาพและมีประสิทธิภาพสูง แต่แน่นอนว่าข้อเสียคือการเพิ่มรสชาติใหม่หมายถึงการเปลี่ยนรหัส ฉันอยากจะแนะนำไม่ให้ทำในแอพพลิเคชั่น - เพราะคุณจำเป็นต้องทำในทุกแอพที่เชื่อมต่อกับฐานข้อมูลนี้นี่เป็นการออกแบบที่สะอาดที่สุดเท่าที่จะเป็นไปได้เพราะมีเพียงรหัสเส้นทางเดียวสำหรับการตรวจสอบ