La réponse à votre question est logique et non physique - la valeur que vous recherchez peut changer pour des raisons commerciales. Par exemple, si vous indexez vos clients par adresse e-mail, que se passe-t-il lorsqu'une adresse e-mail change? Évidemment, cela ne s'appliquera pas à toutes vos tables de recherche, mais les avantages de le faire de la même manière dans l'ensemble de l'application sont que cela rend votre code plus simple. Si tout est entier → relations entières en interne, vous êtes couvert.
Lisez simplement votre commentaire à Sandy - dans ce cas, ce que vous voulez vraiment, c'est une contrainte de vérification , pas une clé étrangère / table de recherche, par exemple:
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
Exécutez ceci et vous obtenez:
(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.
Il s'agit d'une méthode efficace et performante, mais l'inconvénient est bien sûr que l'ajout d'une nouvelle saveur signifie un changement de code. Je déconseille de le faire dans l'application - car alors vous devez le faire dans chaque application qui se connecte à cette base de données, c'est la conception la plus propre possible car il n'y a qu'un seul chemin de code pour faire la validation.