Motores de bases de datos que se equivocan.

Hoy escribiré sobre un tema científico aunque tengan partes de filosofía. La conclusión final es "hay que entenderlo, SI o SI"...

Para los que no son expertos en el tema, un "motor de base de datos" es un producto (software y algo mas) diseñado para administrar datos, guardarlos, leerlos, ordenarlos, agruparlos, sumarlos y también borrarlos (olvidarlos).
Hay cientos de explicaciones en internet, asi que si han llegado aca podrán buscar mas info de "que es un motor" en google. Básicamente lo llamaremos RDBMS que es lo mismo.

Pero una de sus principales funciones es "guardar" un dato, por ejemplo, le envío "123-4567" y le indico un sitio donde ponerlo, supongamos, guardalo en el sitio teléfono. En un futuro yo le digo "que es lo que te pedí guardar como teléfono"? Y me debe responder "123-4567"...
Obvio no?

Tanto como escribir en un papel ese nro "123-4567", guardar el papel y luego buscar el papel y leerlo nuevamente. Mas que obvio. Dice "123-4567".....

pero aunque parece algo natural, no lo es tanto. supongamos ahora que al buscar el papel y leerlo nos encontramos con "-4444"....
Como humano pienso "me habré olvidado de escribir los primeros dígitos ? y como se en que zona vive su teléfono debe ser "123-4444" ?
Pensamos un poco mas y decimos..."porqué guardé -4444, si el teléfono tiene un formato de NNN-NNNN.....

Ahora supongamos que hacemos algo similar pero guardando la fecha de su cumpleaños. Y al llamarla muy contento esperando una noche increible y al saludarla me dice "tonto... fue ayer".
upssssss..... "cómo que ayer?".

Bien, estas situaciones inventadas no están tan lejos de que ocurran. Porque las condiciones en que los motores de bases de datos guardan cosas son "bastante particulares" y actualmente con la globalización, multi idiomas, multiformatos, multiples zonas horarios, multiples standards... ya las cosas no son simplemente números y letras. Aunque los motores se equivocan/ajustan de diferente manera, todos tienen problemas similares.

Hablaremos del Master en Bases de datos... Oracle. Pero puede ser cualquiera. Bueno, mejor usamos SQL que lo podremos culpar a Bill Gates por esto también. je je je.

PREGUNTA: tengo un pan, lo parto en tres, luego lo uno, cuantos panes tengo ?

RESPUESTA SIMPLE: el mismo pan. un pan.
RESPUESTA NERD: casi el mismo pan, porque algunas migas se te cayeron.
RESPUESTA GRACIOSA: 2/3 del pan, porque mi parte me la comí.

RESPUESTA RDBMS: 9/10 del pan original...... ehhhhh????

VERIFICACIÓN CIENTÍFICA
_____ select (10/3) * 3


Y estamos hablando de un producto supuestamente "experto" en el manejo de datos? ni hablar del tratamiento de fechas, la magia que hay que hacer para restar fechas, calcular la diferencia, pero en segundos? en horas? en milisegundos? y si una hora es UMT y otra otra UMT-5? Cual es la diferencia correcta? Y si un formato es ISO y el otro ANSI ?

RESUMEN:
no creas todo lo que veas, prueba, verifica, no confíes nunca en un RDMBS (y lo dice u DBA....)
Y mucho cuidado con lo que guardas y como lo guardas, que luego aunque hayas dado información correcta, el motor te devuelve basura.

Desde desarrollo reportan que un motor está calculando mal los minutos entre dos fechas, basándose en hacer divisiones y multiplicaciones usando un RDBMS.

Y estaban a punto de reportarlo como un BUG/ERROR del RDBMS. Por suerte los paramos a tiempo.

Comentarios

Juan Perez Garcia Greco ha dicho que…
Que loco el tema, lo probe con la calculadora de windows, me da 10, probe hacer el select en un mysql me da 10, pero probe hacerlo en gemstone que es la base de datos que usamos en el laburo, me responde 9/10, pero si lo pido como float me da 0,9 lo cual es lo mismo.

Habra una relacion entre el precio de cada motor de base de datos y la capacidad de redondeo???

Saludos!
Flavio!

Entradas populares de este blog

Como ganar al apalabrados, trucos, trampas... y algo mas.

Una semana en la vida de un DBA (aún vivo)...