Sorunuzun cevabı, fiziksel değil mantıklıdır; aradığınız değer iş nedeniyle değişebilir. Örneğin, müşterilerinizi e-posta adresine göre endekslerseniz, bir e-posta adresi değiştiğinde ne olur? Açıkçası bu, tüm arama tablolarınıza uygulanmayacak, ancak tüm uygulama boyunca aynı şekilde yapmanın faydaları, kodunuzu daha basit hale getirmesidir. Eğer her şey tamsayıysa → içsel tamsayı içsel olarak ilişkilendiyse, haklısın.
Sadece Sandy'ye yorumunuzu okuyun - belki de bu durumda gerçekten istediğiniz şey bir Çek Kısıtlamasıdır , yabancı anahtar / arama tablosu değil, örneğin:
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
Bunu çalıştır ve anlarsın:
(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.
Bu verimli, yüksek performanslı bir yöntemdir, ancak elbette dezavantajı, yeni bir lezzet eklemenin kod değişikliği anlamına gelmesidir. Uygulamada bunu yapmamaya karşı tavsiyede bulunacağım - o zaman bu DB'ye bağlanan her uygulamada yapmanız gerektiğinden, mümkün olan en temiz tasarımdır çünkü doğrulama için sadece tek bir kod yolu vardır.