(Mi scuso se una parte della mia terminologia è disattivata, non ho visto molto su questo argomento e sto usando i termini migliori che avrei potuto trovare)
La logica del modello di dati dovrebbe vivere nello schema del database?
Qui faccio una distinzione tra la logica aziendale e la logica del modello di dati. Con la logica del modello di dati intendo cose che riguardano specificamente l'integrità dei dati, come le eliminazioni a cascata (ad esempio l'eliminazione di un cliente dovrebbe anche eliminare tutti gli indirizzi del cliente, l'eliminazione di un utente dovrebbe rimuovere tutte le appartenenze a tale gruppo), piuttosto che la logica di business di livello superiore e regole. Ho letto " Quanta logica di business dovrebbe implementare il database? "e" Logica aziendale: database vs codice "e assolutamente concorda con il consenso generale che la logica aziendale dovrebbe vivere nel codice, non nel database.
Una parte di me apprezza l'idea del database che applica le regole strutturali del modello di dati. Si può sostenere che si tratta di un problema di database. Può semplificare il lato codice delle cose; hai solo bisogno di eliminare l'entità principale stessa e il database gestirà automaticamente la pulizia appropriata. E aiuterà a rafforzare la struttura dei dati se qualcosa aggira mai l'applicazione e colpisce direttamente il database (ad esempio, apportare modifiche manuali tramite SQL, estrarre dati da un'altra fonte tramite una stored procedure di tipo ETL).
Ma poi l'altra parte di me sembra che sia l'approccio sbagliato. Il codice dell'applicazione ora deve presumere che il database gestirà correttamente questo. Se mai emerge una preoccupazione relativa alla logica del modello di dati che non può essere gestita dal database e dai semplici vincoli, ora la logica del modello di dati si trova in due luoghi diversi: alcuni in codice, altri nel database. E se scegli di cambiare l'archiviazione dei dati in qualcos'altro, ora devi implementare nuovamente la stessa logica sul nuovo sistema di archiviazione.