Patrón de fecha SQL para fechas en las que el usuario puede no conocer toda la información

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

Pregunta

Su sistema permite a los nuevos usuarios registrarse e ingresar la fecha de su boda. Siendo purista, quería almacenar esto como una cita. Después de las entrevistas con los usuarios, quedó claro que la realidad difiere de este enfoque. Los usuarios a menudo no están seguros del día o del mes, y desean almacenar fechas parciales, por lo que " Junio ??de 2009 " o "en algún momento de 2012".

¿Alguien sabe un buen patrón de diseño que permita almacenar fechas parciales y luego tratar de crear una línea de tiempo para el gran día, aunque se hayan ingresado fechas parciales?

¿Fue útil?

Solución

Tal vez un " difuso " fecha. Si dicen "junio de 2009", podrían almacenarse el 15 de junio de 2009, con una variación de +/- 15 días.

" en algún momento de 2010 " sería el 1 de julio de 2010 con una variación de 180 días.

Almacena una fecha y # días.

Si / cómo funcionaría en la práctica, no lo sé. Solo una idea. Un intervalo de fechas podría ser más fácil de implementar.

Otros consejos

Puede almacenarlo como un rango con una columna posterior a la fecha y anterior.

Siempre puede almacenar la fecha en columnas separadas:

  • año
  • mes
  • día del mes

Manténgalos todos anulables. Puede agregar una columna donde almacena el tiempo completo calculado. Para ese tiempo calculado, utiliza algunos valores predeterminados para todas las columnas que son nulas.

Puede almacenar las fechas como YYYYMMDD , con meses / días desconocidos establecidos en 0. por ejemplo, 20090200 sería algún día en febrero de 2009 " Esto le ayudará a ordenar y comparar con relativa facilidad, y si necesita convertirlo en una fecha, puede agregar 1 al mes o al día para obtener una aproximación de comparaciones de fechas más avanzadas.

Tuve un problema similar con las fechas; con el problema adicional que algunas personas también querían decir " 15 de junio " ;, sin especificar el año. ¿Es este un caso que también debes manejar?

Almacené el día, el mes y el año en tres columnas separadas en la base de datos, con cada nullable, luego (de alguna manera) reinventé la rueda en mi aplicación (además de rechazar algunos casos, como personas que dicen " El 15 de 1974 ").

Sin embargo, como puse toda la lógica de manejo de fechas en mi aplicación, nunca accedí a las tres columnas individualmente. En retrospectiva, deseé haberlos puesto en una sola columna, con fechas parciales como cadenas (algo así como "19740615", "1974 ----", "0615", etc.), solo para tener menos desorden de columnas.

Supongo que depende de cuánto quieras hacer en la base de datos y cuánto quieras hacer en tu aplicación. De cualquier manera, creo que inventarás una rueda de forma ligeramente diferente. Pero, por supuesto, eres lo suficientemente bueno como para hacer algunas clases ordenadas, encapsuladas y reutilizables. ¡Eso lo hará divertido! :-)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top