Attualmente, stiamo lavorando al team di architettura sulla definizione dei modelli di database. Ciò che mi ha turbato è il consiglio del mio superiore quando si tratta di lavorare con campi di controllo .
Egli sostiene che i campi updated_at
e updated_by
siano Nullable, ragionando sul fatto che questi devono essere inizializzati come NULL
perché la voce del database non è stata aggiornata ancora .
CREATE TABLE example_table (
...
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
created_by VARCHAR(128) NOT NULL,
updated_at TIMESTAMP WITH TIME ZONE NULL,
updated_by VARCHAR(128) NULL
);
Inoltre, osserva che per esperienza ha imparato che è meglio lasciarli come NULL
, ma sfortunatamente non mi ha fornito esempi concreti.
Sono più propenso a rendere questi campi aggiornati NOT NULL
perché:
-
Ci si assicura che questo non possa essere lasciato vuoto da qualsiasi errore.
-
Si può facilmente capire che il record è nuovo se i campi
created_at
eupdated_at
hanno lo stesso valore. -
Il codice che funziona con questi campi aggiornati sarà più pulito in quanto non dovrà verificare la possibilità che siano nulli.
-
Altri team al lavoro hanno riscontrato inconvenienti. Alcuni strumenti che funzionano con i dati sono incompatibili o non funzionano correttamente con voci con valori aggiornati nulli.
Ecco cosa vorrei implementare:
CREATE TABLE example_table (
...
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
created_by VARCHAR(128) NOT NULL,
updated_at TIMESTAMP WITH TIME ZONE NOT NULL,
updated_by VARCHAR(128) NOT NULL
);
Ho cercato su Google un po 'di tempo, ma non sono riuscito a trovare un articolo che indicasse che una scelta fosse corretta, o che almeno una fosse migliore dell'altra.
Quindi sono curioso: mi manca qualche altro punto di vista? Quale approccio è migliore?
I miei esempi di codice sono in SQL
, ma la mia domanda potrebbe riguardare anche altri tipi di database.