Attualmente ho un database con due tabelle chiamate Articoli e tag. Per consentire agli articoli di essere in più categorie ho una relazione molte a molte. È un errore avere un tale design in termini di prestazioni? o devo rimuovere la relazione tra queste due tabelle e aggiungere una terza tabella come bridge (articleTags)?relazione molti-a-molti nella progettazione del database
risposta
Non c'è niente di intrinsecamente sbagliato con avere una relazione molti-a-molti, avrete solo bisogno di creare un Junction Table (che è quello che suona come ti riferisci con articlesTags
) per facilitare quel rapporto.
Non c'è alcun problema nell'avere una relazione molti-a-molti se questo è ciò che richiedono i dati, ma vorrai una terza tabella per rappresentarla.
Direi "avrai bisogno di un terzo tavolo". – Dave
Una relazione molti-a-molti esiste in un modello relazionale, è solo un'astrazione della mente. Quando implementeremo che ci sarà un tavolo articles_to_tags dove avrete:
fk_article (intero) fk_tag (intero)
Non c'è nessun problema nel usando molti a molte relazioni. È spesso richiesto.
E sì, non è possibile creare una relazione molti a molti, senza utilizzare una terza tabella.
Stai vedendo la differenza tra un progetto di database concettuale (la relazione N: N) e la sua realizzazione fisica. Indipendentemente da come modellate la vostra relazione N: N, avrete bisogno della suddetta tabella di giunzione per farlo funzionare.
Non c'è niente di sbagliato nel modellare un rapporto del mondo reale il più vicino possibile al mondo reale, come è possibile in generale. La chiarezza è il re.
Quando si tratta di domande relative alle prestazioni in qualsiasi sistema, la risposta di solito si riduce a "dipende".
Se il tuo problema di prestazioni è correlato a WRITES, allora una struttura altamente NORMALIZZATA è la migliore e vorresti quella tabella di giunzione. Finirai per scrivere molto meno dati e questo può velocizzare le cose in modo sostanziale (sebbene tu possa bruciare questo vantaggio, dovendo fare ricerche prima di creare gli inserti). Anche la lettura dei singoli tavoli normalizzati può essere molto veloce.
Se il problema è correlato a READS analitici, una struttura DENORMALIZZATA è la migliore. Le join possono essere molto performanti se i tavoli sono grandi e gli indici sono distribuiti. Sacrificerai molto spazio per guadagnare molto tempo.
In generale, si desidera esaminare le specifiche della propria situazione e valutare i pro e i contro di ciascun approccio prima di decidere una soluzione. Personalmente, ho sempre trovato preferibile concentrarmi su Clarity nelle fasi iniziali e refactoring per le prestazioni se scopro un problema in seguito.
- 1. Progettazione di database per una relazione ricorsiva
- 2. Progettazione database SQL, relazione ricorsiva padre-figlio?
- 3. Progettazione del database?
- 4. Che cos'è una relazione nella terminologia del database?
- 5. Identificatore univoco (guid) come chiave primaria nella progettazione del database
- 6. YAGNI si applica alla progettazione del database?
- 7. Progettazione database - campi vuoti
- 8. Java driver del database di progettazione
- 9. Progettazione del database di timeseries in Cassandra
- 10. Progettazione del database per post e commenti
- 11. Hibernate deve guidare la progettazione del database?
- 12. Progettazione database - relazioni vs proprietà
- 13. Progettazione del database per le revisioni del testo
- 14. Modelli di progettazione dati/database?
- 15. Progettazione database per commenti e risposte
- 16. la progettazione del campo della tabella nel database mysql?
- 17. Domanda di progettazione livello database
- 18. È una buona idea usare rowguid come chiave unica nella progettazione del database?
- 19. È brutto usare il nome utente come chiave primaria nella progettazione del database?
- 20. Progettazione del database per memorizzare le notifiche agli utenti
- 21. Relazione tra Hadoop e database
- 22. Schema del database SQLite come modello di relazione entità
- 23. Una domanda per principianti sulla progettazione del database
- 24. Progettazione del database per una grande quantità di dati
- 25. Progettazione del database per il sistema di presenze scolastiche
- 26. Come posso disegnare la progettazione del mio database?
- 27. Buona progettazione del database, numero variabile di attributi
- 28. Progettazione del database per lo "snapshot" temporale dei dati?
- 29. Progettazione del database: miliardi di record in una tabella?
- 30. Progettazione del database per archiviare e valutare l'espressione delle regole
Come hai creato una relazione molti-a-molti senza l'uso di una tabella articoliTags? – flayto
Se si ha una relazione molti-a-molti, è necessario rappresentare la terza tabella: non esiste un'alternativa ragionevole. L'approccio più vicino potrebbe essere una struttura SET in ogni tabella, se il tuo DBMS lo supporta. Ma in genere non c'è molto controllo tra tabelle su tali tipi - la tabella separata è necessaria. –