Ответ на ваш вопрос логичный, а не физический - ценность, которую вы ищите, может измениться по деловым причинам. Например, если вы индексируете своих клиентов по адресу электронной почты, что произойдет при изменении адреса электронной почты? Очевидно, что это не будет применяться ко всем вашим поисковым таблицам, но выгода от того, что вы делаете это одинаково для всего приложения, состоит в том, что он делает ваш код проще. Если внутри все целые → целочисленные отношения, вы покрыты.
Просто прочитайте ваш комментарий к Сэнди - возможно, в этом случае вам действительно нужна проверка ограничений , а не таблица внешнего ключа / поиска, например:
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.
Это эффективный, высокопроизводительный метод, но недостатком, конечно, является то, что добавление нового варианта означает изменение кода. Я бы не советовал делать это в приложении - потому что тогда вам нужно делать это в каждом приложении, которое подключается к этой БД, это самый чистый возможный дизайн, потому что для проверки существует только один путь кода.