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

Il n'y a pas de clés primaires ou candidates dans la table référencée qui correspondent à la liste des colonnes de référence dans la clé étrangère

Les clés étrangères fonctionnent en joignant une colonne à une clé unique dans une autre table, et cette clé unique doit être définie comme une forme d'index unique, que ce soit la clé primaire ou un autre index unique.

Pour le moment, le seul index unique dont vous disposez est un index composé sur ISBN, Title qui est votre clé primaire.

Un certain nombre d'options s'offrent à vous, en fonction de ce que contient BookTitle et de la relation entre les données qu'il contient.

Je risquerais de deviner que l'ISBN est unique pour chaque ligne dans BookTitle. Dans l'hypothèse où c'est le cas, changez votre clé primaire pour qu'elle soit uniquement sur ISBN, et changez BookCopy pour qu'au lieu de Title vous ayez ISBN et rejoignez-le.

Si vous devez conserver votre clé primaire en tant que ISBN, Title alors vous devez soit stocker l'ISBN dans BookCopy ainsi que le titre et la clé étrangère sur les deux colonnes, SOIT vous devez créer un index unique sur BookTitle(Title) en tant qu'index distinct.

Plus généralement, vous devez vous assurer que la ou les colonnes que vous avez dans vos REFERENCES clause correspond exactement à un index unique dans la table parent :dans votre cas, cela échoue car vous n'avez pas un seul index unique sur Title seul.