Pattern data SQL per le date in cui l'utente potrebbe non conoscere tutte le informazioni

StackOverflow https://stackoverflow.com/questions/614093

Domanda

Il tuo sistema consente ai nuovi utenti di registrarsi e inserire la data del loro matrimonio. Essendo un purista, volevo conservare questo come appuntamento. Dopo le interviste agli utenti, era chiaro che la realtà differisce da questo approccio. Gli utenti spesso non sono sicuri del giorno o del mese e desiderano memorizzare date parziali, quindi "giugno 2009" o "a volte nel 2012".

Qualcuno conosce un buon modello di progettazione che consente di memorizzare date parziali e quindi provare a creare una sequenza temporale per il grande giorno, anche se sono state inserite date parziali?

È stato utile?

Soluzione

Forse un " fuzzy " Data. Se dicono "giugno 2009", che potrebbero essere memorizzati come 15 giugno 2009, con una variazione di +/- 15 giorni.

" a volte nel 2010 " sarebbe il 1 ° luglio 2010 con una variazione di 180 giorni.

Quindi memorizza una data e un # giorni.

Se / come funzionerebbe in pratica non lo so. Solo un'idea Un intervallo di date potrebbe essere più semplice da implementare.

Altri suggerimenti

Potresti memorizzarlo come intervallo con una colonna di data precedente e precedente.

Puoi sempre memorizzare la data in colonne separate:

  • anno
  • mese
  • giorno del mese

Conservali tutti nulli. È possibile aggiungere una colonna in cui si memorizza il tempo pieno calcolato. Per quel tempo calcolato usi alcuni valori predefiniti per tutte le colonne che sono null.

È possibile memorizzare le date come YYYYMMDD , con mesi / giorni sconosciuti impostati su 0. ad esempio, 20090200 sarebbe " un giorno di febbraio 2009 " ;. Tutto ciò che dovrai ordinare e confrontare in modo relativamente semplice e se devi convertirlo in una data, puoi semplicemente aggiungere 1 al mese o al giorno per ottenere un'approssimazione per confronti di date più avanzati.

Ho avuto un problema simile con le date; con l'ulteriore problema che alcune persone volevano anche dire "15 giugno", senza specificare l'anno. È un caso che devi gestire anche tu?

Ho archiviato il giorno, il mese e l'anno in tre colonne separate nel database, con ogni nullable, quindi (un po ') ho reinventato la ruota nella mia applicazione (oltre a non consentire alcuni casi, come le persone che dicono " 15 del 1974 ").

Tuttavia, poiché ho inserito tutta la logica di gestione della data nella mia applicazione, non ho mai avuto accesso alle tre colonne singolarmente. Con il senno di poi avrei voluto metterli in una singola colonna, tenendo le date parziali come stringhe (qualcosa come "19740615", "1974 ----" 1974 ---- "1974" - 0615 ", ecc.), Solo in modo da avere meno ingombro di colonne.

Immagino che dipenda da quanto vuoi fare nel database e da quanto vuoi fare nella tua applicazione. Ad ogni modo, penso che inventerai una ruota leggermente diversa. Ma, naturalmente, sei abbastanza bravo da rendere alcune classi ordinate, incapsulate e riutilizzabili - questo lo renderà divertente! : -)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top