Ho a che fare con un set di dati piuttosto esteso. Dopo alcuni join, la tabella di fondazione ha qualcosa come 40 colonne. Le prossime 40 colonne saranno tutte calcolate. Sto cercando di mantenere pulito il mio Java dalla logica di business perché è abbastanza dettagliato, a volte difficile da seguire, e non necessariamente appartiene a un singolo modello. In breve, penso che a causa della vastità della logica aziendale, Java potrebbe essere difficile da seguire per gli utenti futuri.
D'altra parte, ho provato a fare la logica di business in SQL. Tuttavia, supponiamo di avere le colonne A, B, C, D, dove A e B sono dalla tabella di fondazione.
C = A + B
D = C + B
Ora, poiché D dipende da C, ciò richiede una clausola annidata o una clausola with
e, di conseguenza, diventa molto caotica molto rapidamente.
Recentemente il mio collega mi ha introdotto a cursori, non qualcosa con cui ho molta esperienza, ma sembrano ideali per questo caso d'uso. Faccio un select...join...
per recuperare una vista di base abbastanza grande, quindi uso il cursore per quella vista per scorrere ciclicamente ogni riga e calcolare tutte le colonne aggiuntive. In questo modo, posso fare D = C + B
molto più facilmente. Ci sarà ancora un bel po 'di rumore qui, tuttavia sembra che la mia logica di business sarà centralizzata qui. Alla fine di tutti i calcoli, inserirò semplicemente i valori come una riga in una tabella, quindi il mio Java può interrogare quella tabella.
Alcune letture preliminari mi dicono che i cursori non sono consigliabili poiché introducono un sovraccarico aggiuntivo. Tuttavia, se tutto quello che sto facendo sono operazioni puramente aritmetiche per popolare un numero di colonne, l'utente di un cursore è valido? Ho scritto parte del codice ed è facile da seguire e centralizzato.
Capisco che posso fare lo stesso in Java, ma preferisco avere la tabella completamente calcolata disponibile nel mio DB, e sembra che il viaggio di andata e ritorno con Java non sia necessario perché la pulizia del codice non ci sarà molto meglio .
EDIT: Vorrei includere anche che sebbene l'estensione della colonna sia abbastanza grande, la quantità prevista di righe non è poi così grande, è compresa tra 1-2.000. In tal senso, un INSERT
in un ciclo sembra non essere troppo male.