Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

créer une clé étrangère sans clé primaire

Très bonne question. Il n'y a aucune raison fondamentale pour qu'une contrainte référentielle ne fasse pas référence à autre chose qu'une clé candidate. Il existe même un nom pour ces contraintes :les dépendances d'inclusion. Une clé étrangère est juste un type de dépendance d'inclusion où la cible de la contrainte se trouve être une clé candidate.

Malheureusement, SQL ne fournit pas un bon support pour les dépendances d'inclusion ou même pour les contraintes référentielles en général. SQL limite ses contraintes dites FOREIGN KEY au référencement des colonnes d'une contrainte UNIQUE ou PRIMARY KEY (pas nécessairement une clé candidate).

Donc, ce que vous avez rencontré est vraiment une limitation douteuse de SQL. Cela ne signifie pas que vous faites quelque chose de très mal.