TLDR
- L'archiviazione delle query separate dai report che guidano creerà un problema nel database; se stai andando per semplici query SQL, inseriscile nel rapporto.
- Considerare l'utilizzo di SSAS (SQL Server Analysis Services) o SSRS Report Models (a volte chiamato anche modello semantico) anziché semplici query SQL vecchie. Non sempre possibile, ma generalmente funziona meglio.
- Non inserire elementi come il calcolo dei dati delle prestazioni in codice procedurale come Java o C #, è meglio renderli parte di una vista in cima al tuo database (come le funzionalità SSRS o SSAS sopra menzionate), hanno prestazioni migliori e si trovano logicamente nello stack dei rapporti.
Risposta completa
Il più grande svantaggio del backup dei report con le stored procedure è che il report e la query per riempirlo sono archiviati separatamente e mentre il report indica quale query dipende, le stored procedure non ti dicono quali risorse dipendono su di essi. Ora, si potrebbe iniziare con l'intenzione di avere una rigida mappatura 1-a-1 delle stored procedure ai report, ma nella mia esperienza, qualcuno proverà ad essere più furbo in seguito e a sovrapporre la stored procedure a un'altra, e tu finire con una rete di dipendenze (ho trascorso gli ultimi 6 mesi in un progetto per migliorare leggermente la situazione sul mio posto di lavoro). Se mantieni una documentazione rigorosa, puoi affrontarla, ma ammettiamolo, la documentazione è difficile e noiosa e quasi sempre superata.
Una soluzione migliore per l'utilizzo delle stored procedure consiste nell'incorporare la query direttamente nel report, in questo modo il report e la query sono accoppiati tra loro, risiedono insieme e non si ottengono altri asset dipendenti che si bloccano senza il proprio conoscenza. So che questo va di pari passo con la "saggezza convenzionale" sul riutilizzo del codice, ma SQL non è un codice, e le catene di dipendenza non possono essere determinate da nessuna parte così come facilmente è nel codice compilato.
Un altro svantaggio delle stored procedure è che non sono in realtà il modo migliore per generare rapporti, specialmente quando si parla di calcolare gli aggregati su un periodo di 25 anni. SSAS (Sql Server Analysis Services) è specificamente progettato per questo tipo di query e facilita un metodo molto più user-friendly di creazione di query e report (il potenziamento degli utenti nella creazione di report è brillante). Inoltre, consente di interrogare gli stessi dati tramite Excel come tabelle pivot ecc (che la gente ama). L'intera direzione di Microsoft con i report è di spostare l'interrogazione dal database e nel livello SSRS / SSAS. Non sarai sempre in grado di produrre tutti i tuoi report in questo modo e dovrai ricorrere a una query SQL scritta a mano a un certo punto, ma conservala nel report.
Ora, come per la domanda sul fatto che la "logica di business" dovrebbe essere in Java. Se stai parlando di calcoli per varie statistiche, o KPI, essenzialmente funzioni statiche sui dati, piuttosto che qualsiasi cosa che riguarda l'interazione dell'utente, allora no, non dovresti attaccare quelle cose nel codice. Dovrebbero far parte del tuo stack di rapporti. In Microsoft-land il posto migliore per metterli è in un modello SSRS o in un cubo di analisi (infatti i prodotti 2012 hanno una sostituzione per il cubo che offre lo stesso concetto senza la necessità di avere un passo di elaborazione batch, quindi funziona off live data).