Ho applicato le regole aziendali sia al livello dell'applicazione (modelli) che al livello del database (stored procedure che generano errori).Le regole aziendali devono essere applicate sia nel livello applicazione che nel livello database o solo in uno dei due?
Sono stato duplicando i miei convalide in entrambi i posti per alcuni motivi:
- Se le condizioni cambiano tra quando vengono controllati nel codice applicazione e quando sono controllato nel database, i controlli delle regole aziendali nel database salveranno il giorno. Il database mi consente anche di bloccare vari record in un modo più semplice rispetto al mio codice applicazione , quindi sembra che lo sia naturale.
- Se dobbiamo fare alcuni dati batch inserimenti/aggiornamenti al database direttamente, se percorso mi tutte queste operazioni attraverso le mie stored procedure/funzioni che stanno facendo la regola di business convalide, non c'è alcuna possibilità di me inserire dati errati anche se mi mancano le protezioni che otterrei se stavo facendo un input singolo attraverso l'applicazione.
- Mentre rinforzare queste cose solo nel database avrebbe lo stesso effetto sui dati reali, sembra improprio di gettare solo i dati al database di prima del primo fare un buon sforzo per verificare che sia conforme a vincoli e regole aziendali.
Qual è il giusto equilibrio?
Qual è la differenza tra l'applicazione della logica aziendale e l'applicazione dell'integrità dei dati? Supponiamo che io abbia una regola aziendale che dice che al massimo 3 persone possono essere assegnate a un supervisore. Quando vado a inserire la persona n. 4, è un errore perché è un errore di integrità dei dati avere> 3 persone per supervisore, o è una violazione delle regole aziendali? Senza bloccare il record del supervisore prima di verificare che ci siano al massimo 2 persone sotto un supervisore quando si fa un inserto, come può il codice dell'applicazione essere sicuro al 100% che questa regola non sarà interrotta? –
@Rednerln - tasso di variazione. Le regole di integrità del database sono considerate verosimilmente più a lungo delle regole aziendali. Il tuo esempio di persone a un supervisore, mi sarebbe difficile giustificare il fatto che un vincolo di database, se lo facessi, avrebbe dovuto essere basato sui dati (udf basato su un'impostazione di configurazione). E se la regola cambia, si deve porre la domanda su cosa fare riguardo ai dati che violano tale principio. Normalmente si vogliono regole del database che siano solo rilassate, non serrate o modificate qualitativamente. –
@Rednerln - in situazioni multimodali, vuoi che le persone siano in grado di raggiungere il tuo livello di accesso DB (viste, forse) con i loro strumenti di BI o qualsiasi altra cosa e sapere che le loro ipotesi sono valide, che il database ha coesione e integrità al suo perimetro. –