Il n'y a aucune clé primaire ou candidate dans la table référencée qui correspond à la liste de la colonne référencée dans la clé étrangère
Dans SQL Server , j'ai eu cette erreur ->
" il n'y a aucune clé primaire ou candidate dans le tableau référencé 'BookTitle' qui correspondent à la liste de la colonne de référence dans la clé étrangère "FK"!--11-->BookCopy_titre _ _ 2F10007B"."
j'ai d'abord créé une relation appelée BookTitle
relation.
CREATE TABLE BookTitle (
ISBN CHAR(17) NOT NULL,
Title VARCHAR(100) NOT NULL,
Author_Name VARCHAR(30) NOT NULL,
Publisher VARCHAR(30) NOT NULL,
Genre VARCHAR(20) NOT NULL,
Language CHAR(3) NOT NULL,
PRIMARY KEY (ISBN, Title))
puis j'ai créé une relation appelée BookCopy
relation. Cette relation doit faire référence au BookTitle
primaire de la relation clé Title
.
CREATE TABLE BookCopy (
CopyNumber CHAR(10) NOT NULL,
Title VARCHAR(100) NOT NULL,
Date_Purchased DATE NOT NULL,
Amount DECIMAL(5, 2) NOT NULL,
PRIMARY KEY (CopyNumber),
FOREIGN KEY (Title) REFERENCES BookTitle(Title))
Mais je ne peux pas créer le BookCopy
relation parce que l'erreur mentionnée ci-dessus est apparue.
j'apprécie vraiment une aide utile.
4 réponses
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 indice unique que vous avez est un indice composé sur ISBN, Title
qui est votre clé primaire.
Il y a un certain nombre d'options s'offrent à vous, selon exactement ce BookTitle détient et de la relation des données.
je risque un devinez que L'ISBN est unique pour chaque ligne dans BookTitle. En supposant que ce soit le cas, alors changez votre clé primaire pour être seulement sur ISBN, et changez BookCopy de sorte qu'au lieu du titre vous avez ISBN et rejoignez sur cela.
Si vous avez besoin de garder votre clé primaire ISBN, Title
alors vous avez besoin de stocker L'ISBN dans la BookCopy aussi bien que le titre, et la clé étrangère sur les deux colonnes, ou vous avez besoin de créer un index unique sur le titre(titre) comme un index distinct.
Plus en règle générale, vous devez vous assurer que la ou les colonnes que vous avez dans votre REFERENCES
clause correspondent exactement à un index unique dans la table mère: dans votre cas, il échoue parce que vous n'avez pas un seul index unique sur Title
seul.
une autre chose est-si vos clés sont très compliquées parfois vous devez remplacer les endroits des champs et cela aide:
si ce dosent fonctionne:
clé étrangère (ISBN, Titre) références BookTitle (ISBN, Titre)
cela peut être le travail (pas pour cet exemple précis, mais en général) :
clé étrangère (titre,ISBN) références BookTitle (titre, ISBN)
Vous avez besoin d'
- Un index unique sur le Titre dans BookTitle
- ISBN colonne dans BookCopy et le FK est sur deux colonnes
une clé étrangère doit identifier de façon unique la rangée de parent: vous n'avez actuellement aucun moyen de le faire parce que le titre n'est pas unique.
BookTitle
avoir une clé Composite. donc, si la clé de BookTitle
est référencé comme un foreign key
vous devez apporter la clé composite complète.
donc pour résoudre le problème vous devez ajouter la clé composite complète dans le BookCopy
. Donc, ajouter ISBN
colonne. et ils à la fin.
foreign key (ISBN, Title) references BookTitle (ISBN, Title)