Utilizzi validi per la clausola DEFAULT in una definizione di colonna di tabella, oltre alla sequenza nextvalue ()

5

In a recent question , c'è un dibattito sul fatto che un valore predefinito arbitrario nella definizione di una colonna in una tabella sia considerato avere una logica di business nel database. Come sappiamo, se un'istruzione di inserimento non riesce a fornire un valore per una determinata colonna, viene inserito tale valore predefinito anziché null.

La mia domanda è, oltre ad assegnare una sequenza nextvalue () a un PK (surrogato o altro), che non è un valore letterale letterale:

  • Quali usi della clausola predefinita quando si definisce una colonna non sono considerati con la logica aziendale nel database?
posta Tulains Córdova 02.11.2016 - 19:47
fonte

3 risposte

2

Se il valore predefinito è proprio questo, un valore predefinito, che non è "business logic". Se si inserisce un record e si imposta un numero intero a zero, è quella logica? La maggior parte dei linguaggi moderni (ad esempio praticamente tutto basato su C) si azzera comunque a zero. È davvero importante se lo si predefinisce su uno invece?

Per come la vedo io, la "logica di inserimento" entra in un trigger "dopo l'inserimento". Il codice viene eseguito, calcola un valore e lo imposta sul nuovo record. Ad esempio: all'inserimento, il campo C è impostato sulla somma dei campi A e B, anziché su un valore fisso come zero. Che è "logica di inserimento".

"Ogni nuovo record ottiene un valore di" baz "nel campo" foo "se non è già specificato" non è realmente logico in qualcosa di diverso dal senso più banale della parola, certamente non in un programma complesso.

What uses of the default clause when defining a column are not considered having business logic in the database?

Dato che menzioni in modo specifico la "clausola predefinita" che significherebbe "non un trigger", io dico che tutti usi della clausola predefinita non aggiungono logica al database.

Per inciso, la maggior parte dei database considera i valori predefiniti come vincoli predefiniti . In altre parole, " null è al di fuori dei valori accettabili per questo campo quindi impostalo su qualcosa all'interno dell'insieme di valori accettabili". Se lo guardi in questo modo, un valore predefinito è quasi uguale a quello che specifica un intervallo di valori per un campo. Impostalo al di fuori di tale intervallo ( null ) e ottieni invece un valore predefinito.

    
risposta data 02.11.2016 - 20:03
fonte
2

Penso che uno degli usi più preziosi dei valori predefiniti sia l'impostazione di un timestamp per la creazione di record. Spesso questi timestamp sono forniti ma ciò significa che ci sono diversi orologi coinvolti, quindi potresti finire con i record con data e ora che suggeriscono che sono stati aggiunti prima dei record che erano effettivamente lì per primi. Il database è un grande arbitro della domanda "che ore sono / era?"

    
risposta data 02.11.2016 - 20:20
fonte
2

Il campo potrebbe non essere utilizzato da una logica aziendale (che significa applicazione), ma da un processo aziendale (che significa persone). Ad esempio, INSERTED_WHEN o INSERTED_BY colonna con data / ora corrente o utente come predefinito. Principalmente per esigenze di supporto e manutenzione.

Non sono d'accordo con l'assunto dietro la domanda che un valore è una logica. La logica è un processo, il valore non lo è. Il valore del campo non fa parte della logica aziendale, il campo è.

    
risposta data 02.11.2016 - 20:19
fonte