Sto indovinando no, dal momento che le chiavi esterne sono le chiavi principali nelle loro tabelle, quindi saranno uniche.Se una tabella di database che contiene due colonne che sono chiavi esterne ha una terza colonna che è la chiave primaria?
Maggiori informazioni
Sto usando MySQL e le seguenti tre tabelle si utilizza il motore InnoDB
.
======================= =======================
| galleries | | images |
|---------------------| |---------------------|
| PK | gallery_id | | PK | image_id |
| | name | | | title |
| | description | | | description |
| | max_images | | | filename |
| | enabled | | | enabled |
======================= =======================
========================
| galleries_images |
|----------------------|
| FK | gallery_id |
| FK | image_id | <----- Should I add a PK to this table?
========================
Epilogo
Grazie per le risposte eccellenti. Ho imparato a conoscere le chiavi composite e, dopo aver considerato il mio caso specifico, ho deciso di creare una colonna primaria nella colonna image_id
nella tabella galleries_images
. In questo modo, le immagini possono essere associate solo a una galleria, che è ciò che voglio.
Ho anche intenzione di implementare una colonna order_num
in galleries_images
che userò la logica PHP per mantenere. In questo modo l'utente può inserire le immagini in un ordine specifico in ogni galleria. Ho finito con questo:
============================
| galleries_images |
|--------------------------|
| PK, FK | image_id |
| FK | gallery_id |
| | order_num |
============================
Grazie ancora!
Epilogo II
Grazie a quelli di voi che fatto notare che non ho nemmeno bisogno di questo tavolo. Non ho fornito le informazioni più complete per cominciare. Alla fine ho eliminato il tavolo galleries_images
e ho aggiunto lo gallery_id
come chiave esterna alla tabella images
. Ad ogni modo, ho ancora imparato più di quanto pensassi e sarei grato per l'aiuto.
+1. Anche io lo sto pensando, ma avremmo bisogno di maggiori dettagli. Normalmente qualsiasi DB creerà un indice univoco sulla chiave primaria di una tabella. Se la tua tabella ha solo quelle due chiavi esterne e nessuna chiave primaria, allora temo che l'indice non venga creato (non confermato, speculativo). Dipende quindi da cosa e come viene utilizzata la tabella. – Guru
Proprio perché le chiavi esterne sono associate a chiavi primarie nelle tabelle padre, ciò non significa che la combinazione di chiavi esterne deve essere univoca. – David
ASPETTA! l'unica necessità di una tabella di mappatura è se la tua modella richiede una relazione molti a molti tra galleria e immagine. Se crei il PK Image_ID, non sono più molti ... molti semplicemente mettono Gallery_ID nella tua tabella Image e si fanno con questo. Non so cosa sia InnoDB, ma se crea una spazzatura come questa, una delle due cose è vera, non può distinguere tra molti-molti e uno-molti o non è possibile. Questo è il problema con l'avvio di un database da un progetto fisico. Non ti sei preso la briga di considerare quali sono le tue relazioni. –