DATETIME inicio DATETIME fin
Le imploro que use dos valores DATETIME en su lugar, etiquetados como event_start y event_end .
El tiempo es un asunto complejo
La mayor parte del mundo ha adoptado ahora el sistema métrico basado en denery para la mayoría de las mediciones, con razón o sin ella. Esto es bueno en general, porque al menos todos podemos estar de acuerdo en que ag, es un ml, es un cm cúbico. Al menos aproximadamente así. El sistema métrico tiene muchas fallas, pero al menos tiene fallas consistentes a nivel internacional.
Sin embargo, con el tiempo tenemos; 1000 milisegundos en un segundo, 60 segundos a un minuto, 60 minutos a una hora, 12 horas por cada medio día, aproximadamente 30 días por mes que varían según el mes e incluso el año en cuestión, cada país tiene su diferencia horaria de los demás , la forma en que se formatea la hora en cada país varía.
Es mucho para digerir, pero en resumen, es imposible que un escenario tan complejo tenga una solución simple.
Se pueden cortar algunas esquinas, pero hay aquellas en las que es más prudente no
Aunque la respuesta principal aquí sugiere que almacenar un número entero de minutos después de la medianoche puede parecer perfectamente razonable, he aprendido a evitar hacerlo de la manera difícil.
Las razones para implementar dos valores DATETIME son un aumento en la precisión, resolución y retroalimentación.
Todos estos son muy útiles cuando el diseño produce resultados no deseados.
¿Estoy almacenando más datos de los necesarios?
Al principio, puede parecer que se está almacenando más información de la que necesito, pero hay una buena razón para recibir este golpe.
Almacenar esta información adicional casi siempre termina ahorrándome tiempo y esfuerzo a largo plazo, porque inevitablemente encuentro que cuando a alguien se le dice cuánto tiempo tomó algo, también querrá saber cuándo y dónde tuvo lugar el evento.
Es un planeta enorme
En el pasado, he sido culpable de ignorar que hay otros países en este planeta además del mío. Parecía una buena idea en ese momento, pero esto SIEMPRE ha provocado problemas, dolores de cabeza y una pérdida de tiempo más adelante. SIEMPRE considere todas las zonas horarias.
C#
Un DateTime se representa muy bien en una cadena en C #. El método ToString (formato de cadena) es compacto y fácil de leer.
P.ej
new TimeSpan(EventStart.Ticks - EventEnd.Ticks).ToString("h'h 'm'm 's's'")
Servidor SQL
Además, si está leyendo su base de datos por separado de la interfaz de su aplicación, entonces dateTimes es agradable de leer de un vistazo y realizar cálculos en ellos es sencillo.
P.ej
SELECT DATEDIFF(MINUTE, event_start, event_end)
Estándar de fecha ISO8601
Si usa SQLite, entonces no tiene esto, así que use un campo de texto y guárdelo en formato ISO8601, por ejemplo.
"2013-01-27T12: 30: 00 + 0000"
Notas:
Esto usa un reloj de 24 horas *
La parte de la compensación de tiempo (o +0000) de ISO8601 se asigna directamente al valor de longitud de una coordenada de GPS (sin tener en cuenta el horario de verano ni en todo el país).
P.ej
TimeOffset=(±Longitude.24)/360
... donde ± se refiere a la dirección este u oeste.
Por lo tanto, vale la pena considerar si valdría la pena almacenar la longitud, latitud y altitud junto con los datos. Esto variará según la aplicación.
ISO8601 es un formato internacional.
La wiki es muy buena para obtener más detalles en http://en.wikipedia.org/wiki/ISO_8601 .
La fecha y la hora se almacenan en hora internacional y la compensación se registra según el lugar del mundo en que se almacenó la hora.
En mi experiencia, siempre existe la necesidad de almacenar la fecha y la hora completas, independientemente de si creo que existe cuando comienzo el proyecto. ISO8601 es una forma muy buena y preparada para el futuro de hacerlo.
Asesoramiento adicional gratis
También vale la pena agrupar los eventos como una cadena. Por ejemplo, si se graba una carrera, todo el evento podría agruparse por corredor, circuito de carrera, puntos de control de circuito y vueltas de circuito.
En mi experiencia, también es aconsejable identificar quién almacenó el registro. Ya sea como una tabla separada que se completa mediante un activador o como una columna adicional dentro de la tabla original.
Cuanto más pones, más sales
Entiendo completamente el deseo de ser lo más económico posible con el espacio, pero rara vez lo haría a costa de perder información.
Una regla empírica con las bases de datos es, como dice el título, una base de datos solo puede decirle lo que tiene de datos, y puede ser muy costoso revisar los datos históricos, llenando los vacíos.
La solución es hacerlo bien a la primera. Ciertamente, es más fácil decirlo que hacerlo, pero ahora debería tener una visión más profunda del diseño eficaz de la base de datos y, posteriormente, tener una oportunidad mucho mayor de hacerlo bien la primera vez.
Cuanto mejor sea su diseño inicial, menos costosas serán las reparaciones más adelante.
Solo digo todo esto, porque si pudiera retroceder en el tiempo, es lo que me diría cuando llegué allí.