Sono in procinto di creare un social network. Ha diverse entità come notizie, foto, che possono avere commenti. Poiché tutti i commenti hanno le stesse colonne e si comportano allo stesso modo e l'unica differenza è il loro tipo: notizie, foto o qualcos'altro da aggiungere in futuro, ho deciso di creare una tabella per tutti i commenti con una colonna denominata type
. Ha funzionato perfettamente fino a quando ho deciso di aggiungere chiavi esterne al mio schema di database.Come posso creare una chiave esterna su una colonna, ogni record di cui può fare riferimento a una colonna in una delle varie tabelle?
La comment
tabella hanno una colonna parent
, che si riferisce ad id
di news
o photo
tabella, seconda colonna type
.
Il problema è che non riesco ad aggiungere una chiave esterna che fa riferimento allo sconosciuto nella tabella precedente, e ancor più, che si riferisce a più tabelle contemporaneamente.
L'intero database ora utilizza chiavi esterne, ad eccezione di questa colonna parent
nella tabella comment
. Mi dà fastidio perché è il solo luogo in cui non riesco ad aggiungere una chiave esterna.
Sono sicuro di non poter creare una chiave esterna del genere; qualcosa nel mio progetto di database deve essere cambiato. Ho deciso di creare una tabella per i commenti per essere pronti ad aggiungere nuovi tipi di commenti per le nuove entità in futuro - video, musica, articoli, ecc. E non incorrere in problemi di manutenzione quando voglio aggiungere una nuova colonna per tutti i commenti .
Se devo assolutamente creare una tabella separata per ogni tipo di commento per poter utilizzare completamente le chiavi esterne, lo farò. Ma forse esiste già un'altra soluzione comune a questo problema, e io non ne sono a conoscenza?
Forse dovrei creare una sorta di tabella di collegamento, che collega la tabella comment
con le tabelle di altre entità? Ma forse questa soluzione è ancora più complessa della creazione di una tabella separata per ogni tipo di commento?
Forse dovrei avere più colonne nella tabella comment
, come newsId
, photoId
, a cui posso aggiungere chiave esterna?
Queste soluzioni non mi sembrano eleganti, o ho solo frainteso qualcosa. La mia intera percezione di questo problema potrebbe essere semplicemente sbagliata. Questo è il motivo per cui sono qui. Per favore condividi le tue idee.
È stato difficile per me scegliere ** una risposta giusta **: la prima collega a una risposta simile, e la seconda è scritta specificamente per la mia domanda - entrambe sono buone. Ho scelto il secondo - APC - perché è più dettagliato e utilizza i miei termini. Grazie ad entrambi. –
possibile duplicato di [Chiave esterna che si riferisce a chiavi primarie su più tabelle?] (Http://stackoverflow.com/questions/668921/foreign-key-refering-to-primary-keys-across-multiple-tables) –