Odpowiedź na twoje pytanie jest logiczna, a nie fizyczna - wartość, na którą patrzysz, może się zmienić z przyczyn biznesowych. Na przykład, jeśli indeksujesz klientów według adresu e-mail, co stanie się, gdy zmieni się adres e-mail? Oczywiście nie dotyczy to wszystkich twoich tabel odnośników, ale korzyści płynące z robienia tego w taki sam sposób w całej aplikacji są takie, że upraszczają kod. Jeśli wewnętrznie wszystko jest liczbami całkowitymi → relacje liczb całkowitych, jesteś objęty ubezpieczeniem.
Po prostu przeczytaj swój komentarz do Sandy - być może w tym przypadku tak naprawdę chcesz Ograniczenia czekowego , a nie tabeli kluczy obcych / odnośników, np .:
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
Uruchom to, a otrzymasz:
(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.
Jest to wydajna metoda o wysokiej wydajności, ale wadą jest oczywiście to, że dodanie nowego smaku oznacza zmianę kodu. Odradzam robienie tego w aplikacji - ponieważ musisz to zrobić w każdej aplikacji, która łączy się z tym DB, jest to najczystszy możliwy projekt, ponieważ istnieje tylko jedna ścieżka kodu do sprawdzania poprawności.