Ejemplos de casos reales donde alguien quiere evitar los valores NULL a toda costa en su BD y hubiera sido mejor usarlos:
- En un cajero automático no hay billetes y me intenta mostrar el cajero más cercano de la misma cadena. Me muestra un mapa de África con un punto en el mar (la famosa Null Island https://es.wikipedia.org/wiki/Null_Island) donde se supone que está el cajero más cercano. Alguien ha considerado que cuando la posición de un cajero es desconocida era buena idea poner en la BD latitud = 0 y longitud = 0 en vez de latitud = NULL y longitud = NULL
- En un campo «Edad» en algunas de las filas de la tabla no se puede rellenar el dato, y por no ponerlo a NULL se acuerda usar -1 como «desconocido» (ya que el campo es de tipo entero):
- Diferencia de edad entre 30 y NULL (edad desconocida) = NULL (diferencia desconocida)
- Diferencia de edad entre 30 y -1 = 31, es decir, la diferencia de edad de una persona de 30 años y otra de la cual desconozco su edad, es de 31 años
- Media de edad de 30, 40 y NULL = 35
- Media de edad de 30, 40 y -1 = 23
- En la estación de autobuses de Avenida de América una vez oí la locución «el autobús procedente de (silencio) va a hacer su entrada en la estación». Seguramente un campo de tipo String que está vacío. Si hubiera estado a NULL, dependiendo de cómo esté implementado, puede que no se oyera la frase directamente (o puede que se oyera la misma frase, o «autobús procedente de NULL»). Y aparecería por algún sitio en el sistema algún error que ayudara a detectar y localizar el problema, en lugar de «evitar» el error sin más.
- Campos fecha en formato Unix Time (https://es.wikipedia.org/wiki/Tiempo_Unix), con valor 0 o -1 para indicar que la fecha es desconocida:
- 0 en este formato significaría el 1 de enero de 1970 a las 00:00. Espero que nadie esté calculando intervalos de fechas con este dato
- -1 en este formato podría significar el 19 de enero de 2038 o el 13 de diciembre de 1901
- Campos fecha en formato YYYY-MM-DD: los «haters» del NULL suelen intentar poner cuando se usa este formato, la fecha 0000-00-00, y el sistema no suele permitirlo ya que no es un día válido del año, así que simplemente le ponen 0000-01-01, 1900-01-01 o cualquier otra cosa, con lo que estamos en las mismas.
Otros problemas independientes del tipo de dato:
- Campos en los que se necesita que todos los valores sean únicos pero que permitan nulos porque en algunos casos no vamos a conocer el dato: esto está permitido en cualquier SGBD: UNIQUE NULL. Sin embargo, si es UNIQUE NOT NULL, a la segunda vez que metas un dato desconocido (con los famosos valores 0, -1, cadena vacía o similar) tendrás una violación de la constraint UNIQUE que seguramente hará que falle un INSERT o UPDATE de la fila completa y llevará a pérdida del dato completo o un error en la aplicación
Debe estar conectado para enviar un comentario.