lunes, 25 de febrero de 2008

Más acerca de Dates, Times, etc.

Estoy leyendo el libro "Developing Time-Oriented Database Applications in SQL" que está disponible para bajarlo en http://www.cs.arizona.edu/people/rts/tdbbook.pdf
Realmente está muy interesante ver como encararon el problema del modelado de calendarios en SQL y tiene muchos comentarios históricos interesantes. Este libro, además de "Calendrical Calculations" nos está ayudando (en realidad a Maxi Taborda) a terminar el trabajo que presentó en Smalltalks 2007
El core del libro trata sobre como modelar aplicaciones temporales, algo similar al problema que encara el paper de Time Travel: A Pattern Language for Values That Change de Kent Beck, sin embargo los primeros capítulos son muy interesantes en lo que respecta al modelado del calendario en SQL. Algunas cosas que recuerdo son:
1) SQL solo modela el calendario gregoriano
2) Ninguna implementación, lo que leyeron, ninguna implementación es complient con el estándar de SQL-92 que es aquél que define como tratar este problema
3) El que más se acerca al estándar es DB/2, el menos similar es Oracle! (El libro fue escrito en 1998)
4) El calendario Gregoriano no tiene el año 0, por que cuando su predecesor, el calendario Juliano, fue creado en occidente todavía no se "conocía" el número 0
5) Hay indicios de que Jesús (de haber existido) nació en el año 4 antes de Cristo, o sea, nació antes de haber existido (otro milagro!! -:) )
6) SQL-92 define abstracciones para Date y DateTime, pero no para Year y DayOfMonth
7) Utilizan una metáfora similar a la nuestra de linea de tiempo, sin embargo no es tan claro en lo que respecta a los puntos de distinta granularidad
8) Posee el concepto de medida de tiempo, aunque lo llama Interval, algo que en Ansi Smalltalk se denomina Duration. Para Chalten un intervalo de tiempo está más relacionado con un intervalo matemático, o sea, algo que posee un inicio y final.
9) El calendario Arabe Hjiri es lunar, con años de 12 meses de 28 días. Por lo tanto un evento puede caer en verano un año y en invierno en otro año. Se sincroniza con el Gregoriano cada 33 años (la edad de Jesús cuando murió... )
10) Entendí por fin que es un segundo bisiesto!!! A partir de la creación del UTC, para mantener correctamente sincronizado los equinoccios y debido a que la traslación y rotación de la tierra no son constantes, se re-acomodan los relojes sumando o restando uno o dos segundos a un minuto particular (generalmente el último minuto de un día). Hasta ahora solo se han agregado segundos. Esto significa que ya no es válido pensar que los minutos tienen 60 segundos puesto que los hay de 61 y 62 segundos. Esta irregularidad agregada al de los "day light savings" (o sea, el cambio de hora para ahorrar energía como sucedió en Argentina esta año) hace que la aritmética de este modelo no sea tan simple. Solamente piense que al sumarle 60 segundos a una hora de un día particular (un DateTime) puede ser que se queden en el mismo día y hora... en pocas palabras, las unidades de minuto y sus derivados no son más intercambiables o derivables de los segundos y sus derivados (como milisegundos)... todo un problema. Todo un problema por tratar de mantener un punto de referencia absoluto...

Espero que hayan tenido tiempo para leer este post! :-)

No hay comentarios.: