come modellare 2 oggetti che si riferiscono l'un l'altro nel DB

0

Ora ho 2 oggetti che sono "PROBLEMA" e "SOLUZIONE", ovviamente "SOLUZIONE" è una soluzione proposta per un dato "PROBLEMA", il mio problema è che nella mia azienda ho le seguenti relazioni:

1- un "PROBLEMA" può riferirsi a una o più "SOLUZIONE" (cioè un "PROBLEMA" che è accaduto a causa di una "SOLUZIONE"),

2- "PROBLEMA" può riferirsi a uno o più "PROBLEM" (cioè a "PROBLEMA relativo a un altro" PROBLEMA "),

3- "SOLUZIONE" può riferirsi a uno o più "PROBLEM" (cioè, una "SOLUZIONE" proposta a un "PROBLEMA")

4- "SOLUZIONE" può riferirsi a una o più "SOLUZIONE" (cioè una "SOLUZIONE" costruita sopra un'altra "SOLUZIONE")

Mi chiedo come posso modellare questo business in un RDBMS, una soluzione che sto pensando è mettere sia "SOLUZIONE" che "PROBLEMA" nella stessa tabella, ma in realtà sono oggetti completamente diversi

So che la parola "uno o più" nei casi precedenti significa molti a molti, ma come posso dire che la relazione punta o su "PROBLEMA" o "SOLUZIONE", anche come posso ordinare in modo performante (2 "SOLUZIONI" sono correlate allo stesso "PROBLEMA", ma uno è venuto prima dell'altro)

Nota importante: le prestazioni sono una preoccupazione, non voglio molti join o una logica sofisticata che mette in ginocchio l'applicazione

    
posta osama yaccoub 19.11.2018 - 07:46
fonte

1 risposta

0

Passaggio 1: requisiti prima

Non ha senso ottimizzare una soluzione se è sbagliata fin dall'inizio. Quindi è necessario implementare tre relazioni molti-a-molti (tra soluzione e problemi, tra problemi e tra soluzioni).

Quindi, che ti piaccia o no, avrai bisogno di un paio di join, perché molti-a-molti richiederanno almeno tre tavoli. Una singola tabella per entrambi non soddisferà i requisiti (possibile solo per le relazioni uno a uno)

Opzione 1:

  • Tabella con problemi (chiave primaria: id problema)
  • Tabella con soluzioni (chiave primaria: ID soluzione)
  • Relazione molti a molti con coppie di ID problema e ID soluzione.
  • Relazione molti a molti con coppie di problemi correlati
  • Relazione molti a molti con coppie di soluzioni

Opzione 2:

  • Tabella del problema univoco e id della soluzione, che per ogni ID indica se si tratta di un problema o di una soluzione
  • Tabella delle descrizioni dei problemi (solo voci per id corrispondenti ai problemi)
  • Tabella delle descrizioni delle soluzioni (solo voci per id corrispondenti alle soluzioni)
  • Tabella delle relazioni contenente coppie di ID correlati (se problemi o soluzioni)

In tutti i casi, è possibile creare un problema, quindi una soluzione, quindi un collegamento tra entrambi.

Passaggio 2: Ottimizza

Solo dopo aver scritto i join necessari, sarai in grado di ottimizzare.

Ma prima devi scoprire se si tratta di un problema. Perché se le tue tabelle hanno indici sugli ID e con la potenza dei moderni ottimizzatori RDBMS, avrai a malapena un impatto sulle prestazioni.

    
risposta data 19.11.2018 - 08:39
fonte

Leggi altre domande sui tag