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