Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Non sono presenti chiavi primarie o candidate nella tabella di riferimento che corrispondono all'elenco delle colonne di riferimento nella chiave esterna

Le chiavi esterne funzionano unendo una colonna a una chiave univoca in un'altra tabella e tale chiave univoca deve essere definita come una qualche forma di indice univoco, che si tratti della chiave primaria o di un altro indice univoco.

Al momento, l'unico indice univoco che hai è composto su ISBN, Title qual è la tua chiave primaria.

Ci sono una serie di opzioni a tua disposizione, a seconda di cosa contiene esattamente BookTitle e della relazione tra i dati al suo interno.

Azzarderei a indovinare che l'ISBN è unico per ogni riga in BookTitle. Partendo dal presupposto che questo sia il caso, cambia la tua chiave primaria in modo che sia solo su ISBN e cambia BookCopy in modo che invece di Titolo abbia ISBN e unisciti a quello.

Se devi conservare la tua chiave primaria come ISBN, Title quindi devi memorizzare l'ISBN in BookCopy, così come il titolo e la chiave esterna su entrambe le colonne, OPPURE devi creare un indice univoco su BookTitle(Title) come indice distinto.

Più in generale, devi assicurarti che la colonna o le colonne che hai nei tuoi REFERENCES la clausola corrisponde esattamente a un indice univoco nella tabella padre:nel tuo caso fallisce perché non hai un unico indice univoco su Title da solo.