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.

33
demandé sur marc_s 2013-07-26 15:04:57

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.

44
répondu Chris J 2013-07-26 11:14:57

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)

10
répondu Dan 2014-01-09 00:19:22

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.

6
répondu gbn 2013-07-26 11:15:37

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)
3
répondu Talha Ahmed Khan 2013-07-26 11:15:54