Dì allo sviluppatore che sono invitati ad aggiungere tale logica al codice dell'app per impedire tali aggiornamenti. Ma anche che non rimuoverai DENY
. Se / quando verrà mai il giorno (e cosìpotrebbe non farloprobabilmente non lo farà) che qualcuno riceve un errore nel tentativo di aggiornare una di queste colonne, quindi puoi discutere se rimuoverai o meno DENY
, il che richiederà una giustificazione effettiva e solida sul perché qualcuno dovrebbe aggiornare quel valore nel primo posto.
Il punto è che dovrebbe esserci un vero caso aziendale alla base di ciò che le persone trascorrono il loro tempo. Il tempo è molto richiesto ma l'offerta è scarsa, quindi tu (e tutti gli altri) avete cose più importanti da fare che cambiare il sistema in base all'opinione di qualcuno. Ci sarà sempre una varietà di opinioni (spazi vs tab, chiunque?) E potresti passare anni a cambiare questo avanti e indietro se lo sviluppatore lascia e viene sostituito da uno che si oppone fortemente a quei campi che sono aggiornabili. Se nessun cliente lo richiede (o qualcosa che lo richiede) e non vi è alcun beneficio tangibile (anche benefici ritardati come la pulizia del debito tecnico, che è difficile mostrare il ROI, ma è molto utile, dato che il le probabilità che il tempo trascorso non comporti un effettivo risparmio sui costi nel lungo periodo sono scarse a nessuno), quindi chiudere la richiesta o inserirla nel backlog con una priorità bassa, anche nei casi in cui l'idealismo dice che dovrebbe essere cambiata (questo non è uno di quei casi, ma menzionato per quelli che pensano che sia). L'idealismo è ottimo per le conversazioni, ma le aziende non possono pagare l'affitto, le utenze, i dipendenti, le tasse, ecc. Con ideali.
@ jpmc26 ha ragione sulla necessità di comunicare, ma non esattamente su ciò che deve essere comunicato. Sì, dovresti ascoltare ciò che gli altri stanno chiedendo e cercare di capire il loro ragionamento, che include porre domande se non sei chiaro su qualcosa.
TUTTAVIA, il database non è subordinato all'applicazione e i professionisti del database (amministratori, ingegneri, qualunque sia il nome utilizzato dall'azienda) non sono subordinati agli sviluppatori (come sembra implicito nella risposta). Non lavori per gli sviluppatori, lavori per l'azienda, proprio come loro. Questo è uno sforzo di squadra e non dovresti chiedere perdono per aver fatto il tuo lavoro. Detto questo, noi tipi di computer non siamo (generalmente) conosciuti per le nostre capacità comunicative interumane, quindi, devi davvero assicurarti che gli altri ti capiscano , qual è il tuo ragionamento, quali sono le tue responsabilità E come funzionano queste cose .
Ho inserito l'ultima parte perché c'è un alto grado di incomprensioni, disinformazione e mancanza di conoscenza là fuori (anche alcuni proprio qui in questa stessa pagina). Ad esempio, sembra esserci questa idea che tutte le regole sono regole aziendali. Dobbiamo spiegare che esiste una distinzione tra regole dei dati e regole aziendali (@Aaron si riferiva a questo come "vincolo del flusso di lavoro vs vincolo dei dati" in un commento sulla domanda) e che mentre la maggior parte dei dati appartiene naturalmente all'applicazione, alcuni dati appartiene effettivamente al modello di dati. Un DBA dovrebbe dettare agli sviluppatori come saranno vincolati i dati dell'applicazione ? Ovviamente no. È nostro compito offrire come i dati dell'applicazione possono iessere vincolato. Se una violazione di una regola aziendale correlata ai dati dell'applicazione potrebbe causare danni e l'app non è l' unico modo al 100% di manipolare i dati, forse un vincolo di controllo potrebbe davvero aiutare (e non è difficile modificarli o rimuoverli ).
MA, provenienti dall'altra direzione, gli sviluppatori non dovrebbero dettare come vengono gestiti i dati del modello di dati (cioè i metadati). Ciò include i campi di controllo (come le colonne created_on
/ created_by
) e le colonne PK / FK (questi valori dovrebbero essere conosciuti solo internamente e non dati ai clienti). Questi dati non sono ciò che l'app memorizza sui clienti (anche se l'app può vedere i valori e persino usarli, come con gli ID), è ciò che il modello di dati memorizza sui dati dell'app.
Quindi ha senso utilizzare le regole dei dati per proteggere i dati del modello di dati. E farlo non implica che stai per iniziare ad aggiungere vincoli o restrizioni ai dati dell'applicazione. MA sarà difficile portare avanti la conversazione in modo veramente produttivo se questa distinzione non viene compresa.