Recentemente si è verificato uno scenario insolito durante la normalizzazione di un vecchio database relazionale.
I fatti
Ci sono ~ 8 tabelle collegate a una tabella centrale, in cui esistono riferimenti tra le numerose tabelle possono o meno .
Sono utilizzati molti dati e, sebbene questa tabella sia stata inizialmente progettata, creata e mutata nel tempo, le prestazioni sono state prese in considerazione. Quindi, non c'erano tabelle di collegamento fatte tra la centrale e l'ampli; altre tabelle.
Sto cercando di migliorare la struttura di questo, ma non di sacrificare le prestazioni della query, dal momento che le informazioni di tutte le tabelle possono essere utilizzate per la segnalazione.
Domanda: Come procedere nell'ottimizzazione / normalizzazione di una struttura di tabella come quella menzionata, senza sacrificare il fattore di prestazione?
Ho preso in considerazione le seguenti opzioni:
1 : l'aggiunta di tabelle di collegamento tra di loro renderebbe le query abbastanza avanzate, dove se viene eseguita una ricerca, tutte le tabelle pivot dovrebbero essere cercate per identificare qualsiasi relazione tra loro.
2 : aggiunta dell'ID della tabella centrale come indice sui tavoli esterni. Questa è un'idea, ma poi di nuovo, per trovare qualsiasi informazione, avresti bisogno di interrogare le altre tabelle. Per migliorare questo, aggiungere un campo di tipo di qualche tipo sulla voce della tabella centrale potrebbe aiutare a identificare le informazioni che esistono sui tavoli esterni.
Modifica - Esempio ERD
Ad esempio, considera un negozio di riparazioni di computer. Ai fini dell'esempio, vengono fatte le seguenti ipotesi:
- Questo è un piccolo sottosistema, un cliente potrebbe essere entrato per comprare un ventilatore RGB e non ha portato un dispositivo. Quindi, i clienti non devono avere un dispositivo cliente
- Quando si esegue una riparazione e viene registrata un'Attività di riparazione, il cliente potrebbe richiamarla per qualsiasi motivo.
- Per ogni RepairActivity, è possibile visualizzare una relazione 1 a 1 tra la tabella WorkInformation.
- Un RepairInvoice viene generato solo quando il cliente entra nello store, quindi, un'Attività Repair può esistere senza uno.
- Un Cliente può avere un Dispositivo Cliente registrato sul sistema e non averlo portato per una riparazione.
Questo è un esempio di base e il sistema menzionato nella domanda ha molte più tabelle allegate.