Questo è molto simile a another question che è stato chiuso come non una vera domanda. Ho provato a modificarlo per renderlo valido per la riapertura, ma mi è stato detto che avrei fatto meglio a fare una nuova domanda.Come archiviare datetime in SQLite
Sto sviluppando su Android e ho bisogno di memorizzare valori datetime in un database SQLite per tenere traccia degli eventi ricorrenti che generano notifiche. Dovrò anche essere in grado di interrogare il database in base agli intervalli di tempo.
Il SQLite documentation afferma che non supporta i tipi di date specifici, ma che le date possono essere rappresentati utilizzando tipi di testo, reale, o intero:
TESTO come stringhe ISO8601 ("AAAA-MM-GG HH: MM : SS.SSS ").
REALE come numeri del giorno giuliano, il numero di giorni da mezzogiorno a Greenwich il 24 novembre, 4714 a.C. secondo il calendario gregoriano prolettico.
INTEGER come ora Unix, il numero di secondi dal 1970-01-01 00:00:00 UTC.
I vantaggi di ciascuna sembrano inizialmente essere:
- TESTO utile per migliorare la leggibilità nel database con possibilità di visualizzare direttamente dopo (nessuna trasformazione necessario), ma costoso se i calcoli devono essere eseguite su loro. Presenta possibili errori da fusi orari.
- REALE utile per date precedenti al 1970, valido per calcoli o confronti di date. Non rappresenta l'ora del giorno, solo i giorni.
- INTEGER utile per calcoli o confronti datetime, ottima compatibilità poiché è uno standard ampiamente supportato.
Questo suono è corretto? L'utilizzo di un INTEGER per i tempi di trasmissione delle query consente di interrogare gli intervalli di tempo in modo notevolmente più rapido rispetto a quando si utilizza TEXT? Qualcos'altro che non ho considerato?
Dato il mio caso d'uso, quale di queste soluzioni sarebbe la migliore?
Che tipo di dati ci si aspetta (centinaia, migliaia, milioni di record)? SQLite è pensato per essere un piccolo db, e come tale qualsiasi cosa su poche centinaia di record è eccessivo. Ti suggerirei di utilizzare il testo per archiviare i dati. Solo se ne si vede la necessità (è necessario calcolare il datetime su migliaia di record), quindi modificare i dati sottostanti del datetime su un real o un int. –
Al massimo il numero di record sarebbe nelle centinaia basse. Suppongo che ciò significhi che le prestazioni non saranno un problema, ma il testo sembra complicare i confronti e sono preoccupato dell'errore che l'ora legale potrebbe introdurre. – Matthew