No olvides que en las ciencias informáticas cualquier problema casi siempre tiene diversas soluciones, por lo tanto nosotros te compartimos lo más óptimo y eficiente.
Solución:
Digamos que el registro proviene de un formulario para recopilar información de nombre y dirección. La línea 2 de la dirección normalmente estará en blanco si el usuario no vive en el apartamento. Un vacío string en este caso es perfectamente válido. Tiendo a preferir usar NULL para indicar que el valor es desconocido o no dado.
No creo que valga la pena preocuparse por la diferencia de almacenamiento físico en la práctica. Como administradores de bases de datos, ¡tenemos peces mucho más importantes que freír!
No sé sobre MySQL y PostgreSQL, pero permítanme tratar esto un poco en general.
Hay un DBMS, a saber, Oracle, que no permite elegir a sus usuarios entre NULL y ”. Esto demuestra claramente que no es necesario distinguir entre ambos. Hay algunas consecuencias molestas:
Estableces un varchar2 en un vacío string como esto:
Update mytable set varchar_col = '';
lo siguiente conduce al mismo resultado
Update mytable set varchar_col = NULL;
Pero para seleccionar las columnas donde el valor está vacío o NULL, debe usar
select * from mytable where varchar_col is NULL;
Usando
select * from mytable where varchar_col = '';
es sintácticamente correcto, pero nunca devuelve una fila.
Por otro lado, al concatenar cadenas en Oracle. Los varchars NULL se tratan como cadenas vacías.
select NULL || 'abc' from DUAL;
rendimientos a B C. Otros DBMS devolverían NULL en estos casos.
Cuando quiera expresar explícitamente que se asigna un valor, debe usar algo como ‘ ‘.
Y debe preocuparse si el recorte no vacío da como resultado NULL
select case when ltrim(' ') is null then 'null' else 'not null' end from dual
Lo hace.
Ahora mirando DBMS donde ” no es idéntico a NULL (por ejemplo, SQL-Server)
Trabajar con ” es generalmente más fácil y en la mayoría de los casos no hay necesidad práctica de distinguir entre ambos. Una de las excepciones que conozco es cuando su columna representa alguna configuración y no tiene valores predeterminados vacíos para ellos. Cuando puede distinguir entre ” y NULL, puede expresar que su configuración está vacía y evitar que se aplique el valor predeterminado.
Depende del dominio en el que estés trabajando. NULL
significa ausencia de valor (es decir, hay sin valor), mientras está vacío string significa que hay un string valor de longitud cero.
Por ejemplo, digamos que tiene una tabla para almacenar los datos de una persona y contiene un Gender
columna. Puede guardar los valores como ‘Masculino’ o ‘Femenino’. Si el usuario puede optar por no proporcionar los datos de género, debe guardarlo como NULL
(es decir, el usuario no proporcionó el valor) y no vacío string (ya que no hay género con valor ”).
Si posees algún titubeo o forma de progresar nuestro artículo eres capaz de añadir un paráfrasis y con mucho placer lo ojearemos.