Sto facendo fatica a capire il design di un database Oracle con cui ho lavorato negli ultimi 9 mesi. Il database è per il nostro sistema di gestione aziendale e io lavoro principalmente per la segnalazione e il data warehousing.
Il database ha poco più di 5.000 tavoli (non tutti vengono utilizzati) e quindi quando ho iniziato a lavorare con esso ho avuto difficoltà a capire la relazione tra tabelle diverse e a trovare quelli che erano importanti per me. Per peggiorare, non ci sono relazioni con le chiavi straniere. Almeno, devo ancora vederne uno dopo 9 mesi. Inoltre, gli stessi campi vengono ripetuti in più di una tabella. Ad esempio, sia la tabella delle righe dell'ordine cliente che la tabella fattura cliente hanno i campi ordine, riga e rilascio e questi campi fanno parte della chiave primaria in entrambi i casi. Non potrebbe essere stato gestito da una relazione? Immagino che il lato positivo di questo sia che posso richiedere le informazioni della fattura utilizzando i dati dell'ordine del cliente senza utilizzare alcun join.
Recentemente ho anche esaminato la funzionalità di alcuni pacchetti perché vogliamo utilizzare alcune delle procedure per alcune attività personalizzate che vogliamo aggiungere. Durante la revisione, ho scoperto che gli aggiornamenti a cascata e i valori predefiniti sono gestiti nel codice pl / sql. Ancora una volta, questo può essere fatto semplicemente definendolo come una parte dello schema, ma faccio persino fatica a chiamarlo aggiornamento a cascata perché nel caso particolare a cui mi riferisco, non sarebbe nemmeno essere richiesto se non hanno avuto informazioni ripetute in diverse tabelle. Per quanto riguarda i valori predefiniti, l'interfaccia utente per il sistema consente a determinati utenti di modificare i valori predefiniti e questo approccio evita di dover modificare la tabella.
Ora, questo è da un grande venditore di successo con molti clienti. Fatico a capire perché questi scelgono questo design. Non sono andato a scuola per informatica e non ho abbastanza esperienza per esprimere un giudizio strong sul loro design, quindi continuo a ripetermi che questa è solo una tecnica esoterica a cui non sono stato reso noto. Mi piacerebbe davvero capire, perché?
Modifica
Giusto per chiarire il mio commento sopra sull'aggiornamento a cascata. È una cattiva pratica e non penso che Oracle abbia persino un aggiornamento a cascata. Ma non intendevo un aggiornamento a cascata nel vero senso della parola. Era l'aggiornamento delle informazioni duplicate su più tabelle.
Devo dire però, nonostante la mancanza di limiti referenziali, l'integrità dei dati dell'applicazione è solida e affidabile (hanno un sacco di codice pl / sql per garantire questo). Voglio dire, questi ragazzi non sono dei dilettanti (mettendo da parte ciò che la maggior parte chiamerebbe cattivo design). Questo ero solo curioso di sapere se c'era qualcosa che mi mancava. Ma come hanno detto le persone nei commenti, potrei non sapere mai perché hanno fatto quello che hanno fatto e come le decisioni prese 20 anni fa stanno influenzando la loro architettura ora. Tutto quello che so è che hanno un prodotto che funziona e vende.