Come archiviare il datetime nel database se la porzione di tempo è facoltativa?
-
06-07-2019 - |
Domanda
Devo memorizzarlo in un singolo campo data / ora o campi data e ora separati? Preferisco memorizzarlo come un singolo campo data / ora ma devo sapere quando un utente non ha inserito una porzione di tempo.
Come archiviarlo al meglio nel database? Sto usando Postgresql.
Soluzione
Ci sono sicuramente dei motivi per cui questa è una cattiva idea. Ci sono anche motivi per cui le tue scelte sono limitate. È una cattiva idea perché è un singolo elemento di dati e per la ragione più pratica che non puoi memorizzare un fuso orario se hai due campi.
Come accennato in precedenza, i null sono l'ovvio vantaggio dell'uso di due campi.
Potresti anche prendere in considerazione l'utilizzo di un singolo campo datetime e la memorizzazione di un flag per indicare se l'utente ha inserito o meno un orario. Questa potrebbe essere una bandiera booleana. Tuttavia, dovrai comunque pensare a come utilizzare questi dati: l'immissione di una sola data in un campo data / ora porta a impostare un componente orario su mezzanotte. Ciò avrà implicazioni nell'ordinamento e nella selezione. Inoltre, se stai memorizzando fusi orari, dovrai fare molta attenzione quando usi i dati.
Per soddisfare la tua esigenza di sapere se è stato inserito un orario devi avere due campi. Tuttavia, non è necessario che il secondo campo sia un momento.
Altri suggerimenti
La risposta ovvia è usare due campi separati; allora puoi usare i valori NULL.
Se si sceglie di utilizzare un campo, sarà necessario scegliere una parte del tempo magico che indica "non è entrato in tempo reale", che ha il rischio di coincidere con un tempo reale (per quanto improbabile).
Inoltre, se si intende utilizzare spesso la data e l'ora separatamente separatamente, potrebbe essere conveniente utilizzare campi separati; altrimenti dovrai spesso utilizzare le funzioni di selezione per estrarre la parte rilevante di un campo.