Los estándares de desarrollo de base de datos en nuestra organización establecen que los campos varchar no deben permitir valores nulos. Deben tener un valor predeterminado de una cadena vacía (""). Sé que esto facilita las consultas y la concatenación, pero hoy, uno de mis compañeros de trabajo me preguntó por qué ese estándar solo existía para los tipos varchar y no para otros tipos de datos (int, datetime, etc.). Me gustaría saber si otros consideran que esto es un estándar válido y defendible, o si varchar debe tratarse del mismo modo que los campos de otros tipos de datos.Columnas Varchar: anulables o no
Creo que esta norma es válida por la siguiente razón:
Creo que una cadena vacía y los valores nulos, aunque técnicamente diferentes, son conceptualmente los mismos. Una cadena vacía de longitud cero es una cadena que no existe. No tiene valor. Sin embargo, un valor numérico de 0 no es lo mismo que NULO.
Por ejemplo, si un campo llamado OutstandingBalance tiene un valor de 0, significa que quedan $ 0.00. Sin embargo, si el mismo campo es NULL, eso significa que el valor es desconocido. Por otro lado, un campo llamado CustomerName con un valor de "" es básicamente el mismo que un valor de NULL porque ambos representan la inexistencia del nombre.
Leí en alguna parte que una analogía para una cadena vacía vs. NULL es la de un CD en blanco vs. ningún CD. Sin embargo, creo que esta es una analogía falsa porque todavía existe un CD en blanco físicamente y todavía tiene un espacio de datos físicos que no tiene ningún dato significativo escrito en él. Básicamente, creo que un CD en blanco es el equivalente de una cadena de espacios en blanco (""), no una cadena vacía. Por lo tanto, creo que una cadena de espacios en blanco es un valor real separado de NULL, pero una cadena vacía es la ausencia de valor conceptualmente equivalente a NULL.
Háganme saber si mis creencias con respecto a las cadenas de longitud variable son válidas, o por favor, infórmeme si no lo son. He leído varios blogs/argumentos con respecto a este tema, pero todavía no veo una verdadera diferencia conceptual entre NULL y cadenas vacías.
+1: Opción de columna de unidad de reglas empresariales, no tipo de datos. Además, no hay ahorro de espacio usando cadenas NULL vs longitud cero: http://vampirebasic.blogspot.com/2009/01/sql-server-null-varchar-vs-empty.html –