Comment créez-vous une relation avec une clé non primaire dans SQL Server?

8

J'ai une table d'utilisateurs qui a deux colonnes une clé primaire appelée UserID et une autre colonne appelée UserName.

  • UserID (int) PK
  • Nom d'utilisateur (varchar (256)

Ils sont tous les deux uniques mais j'ai décidé pour des raisons d'utiliser le nom d'utilisateur comme référence dans d'autres tables. Ainsi, la table de commande, par exemple, a une référence à l'utilisateur par nom d'utilisateur et non par ID utilisateur.

  • Numéro de commande
  • Nom d'utilisateur

Je veux créer une relation entre toutes les tables qui référencent le nom d'utilisateur et la table des utilisateurs afin d'obtenir la fonctionnalité de mise à jour / suppression en cascade de SQL Server.

Mais SQL Server ne me permet pas de créer une relation sur une colonne de clé non primaire. Existe-t-il un moyen d'obtenir la fonctionnalité de mise à jour / suppression en cascade sans modifier la table des utilisateurs afin que UserName soit la clé primaire et non UserID?

Shrage Smilowitz
la source

Réponses:

13

Créez un index ou une contrainte unique, UserNamepuis vous pouvez le référencer dans une amende de contrainte FK.

Votre déclaration selon laquelle

Sql Server ne me permet pas de créer une relation sur une colonne de clé non primaire

est incorrect. SQL Server se soucie uniquement du fait que les colonnes participant à la relation FK ont un index unique défini.

Martin Smith
la source
1
vous avez raison, ma déclaration était basée sur le message d'erreur que j'ai reçu du serveur SQL lorsque j'ai essayé de créer la relation.
Shrage Smilowitz