De null o de si sé programar o no

Publicado el 19 junio 2013 por Elvenbyte @elvenbyte

Una discusión con varias opiniones

No recuerdo cuándo fue la primera vez que me enfrenté a un valor null. Supongo que habrá pocos programadores que lo recuerden. Pero sí recuerdo lo que mis grandes maestros me han dicho siempre, que no es más que un ejercicio de pura lógica:

    1. Los problemas hay que atajarlos de raíz.
    2. Un null es un problema.
    3. La raíz en programación es la base de datos.
    4. Por lo tanto el null hay que tenerlo controlado, en la medida de lo posible, ya en la base de datos.

Eso no quiere decir que no haya que tener en cuenta en programación que pueda venir un null, pero nos ahorra mucho código saber que la base de datos no nos va a enviar nunca null desde un campo con tipo determinado, primitivo y concreto.

Hoy me he topado con el caso contrario. La culpa en realidad ha sido mía, por pensar que un código postal (campo de tipo texto bien definido) iba a traer, en el peor de los casos, un espacio en blanco. Pero no, traen null.

La base de datos es MySQL, la plataforma de desarrollo es Java Server Faces, todo en versiones viejas, y al que en su momento definió la base de datos, por lo visto nadie le explicó que, en MySQL, puedes asignar un valor por defecto a un campo, y este no tiene porqué ser null, precisamente.

Aquí el problema es que todo el mundo sabe, o quiere saber, y aunque me consta que mi jefe sabe lo que me decía, sigo diciendo que el problema está en la base de datos, o sea que no tendríamos porqué estar controlando casi cada línea con contenido de base de datos.

Pero siempre está la excepción, que es el argumento de la discusión: si el campo trae un null, viene vacío, y por lo tanto no ocupa espacio. Una tabla con un millón de registros, con un campo con un espacio en blanco, ocupa un byte por registro. Un millón de bytes, 1 mega para los amigos.

Aquí, como en otras discusiones, como podría ser la de cuándo romper la tercera forma normal, tenemos el dilema. ¿Merece la pena en este caso? Y si merece la pena, ¿entonces la culpa es del programador o del DBA?

Bonita discusión, pero eterna como jugar a las tres en raya, me temo.

Aún así, y para reforzar mi posición, me permito dejar un par de enlaces, a modo de argumento a mi favor:

  • Cuándo utilizar NULL en las tablas MySQL
  • Problemas con valores NULL

Y con estos dos yo creo que ya hay.