Jawaban atas pertanyaan Anda logis, bukan fisik - nilai yang Anda cari mungkin berubah karena alasan bisnis. Misalnya, jika Anda mengindeks pelanggan Anda dengan alamat email, apa yang terjadi ketika alamat email berubah? Jelas ini tidak akan berlaku untuk semua tabel pencarian Anda, tetapi manfaat melakukannya dengan cara yang sama di seluruh aplikasi adalah membuat kode Anda lebih sederhana. Jika semuanya bilangan bulat → hubungan bilangan bulat secara internal, Anda akan dilindungi.
Cukup baca komentar Anda kepada Sandy - mungkin dalam hal ini yang benar-benar Anda inginkan adalah Periksa Kendala , bukan tabel kunci asing / pencarian, misalnya:
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
Jalankan ini dan Anda mendapatkan:
(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.
Ini adalah metode yang efisien dan berkinerja tinggi, tetapi kerugiannya tentu saja adalah menambahkan rasa baru berarti perubahan kode. Saya akan menyarankan untuk tidak melakukannya dalam aplikasi - karena dengan itu Anda perlu melakukannya di setiap aplikasi yang terhubung ke DB ini, ini adalah desain yang paling bersih karena hanya ada satu jalur kode untuk melakukan validasi.