Sé que este tema es un poco controvertido y hay muchos artículos / opiniones en internet. Desafortunadamente, la mayoría de ellos asume que la persona no sabe cuál es la diferencia entre NULL y una cadena vacía. Así que cuentan historias sobre resultados sorprendentes con uniones / agregados y generalmente hacen un poco más de lecciones avanzadas de SQL. Al hacer esto, fallan absolutamente todo el punto y por lo tanto son inútiles para mí. Así que espero que esta pregunta y todas las respuestas hagan avanzar un poco el tema.
Supongamos que tengo una tabla con información personal (nombre, nacimiento, etc.) donde una de las columnas es una dirección de correo electrónico con tipo varchar. Suponemos que, por algún motivo, es posible que algunas personas no deseen proporcionar una dirección de correo electrónico. Al insertar dichos datos (sin correo electrónico) en la tabla, hay dos opciones disponibles: establecer celda en NULL o configurarlo en cadena vacía (''). Supongamos que soy consciente de todas las implicaciones técnicas de elegir una solución en lugar de otra y puedo crear consultas SQL correctas para cada escenario. El problema es que incluso cuando ambos valores difieren en el nivel técnico, son exactamente iguales en el nivel lógico. Después de mirar NULL y '' llegué a una sola conclusión: no sé la dirección de correo electrónico del tipo. Además, no importa cuánto lo intenté, no pude enviar un correo electrónico utilizando NULL o una cadena vacía, por lo que aparentemente la mayoría de los servidores SMTP están de acuerdo con mi lógica. Así que tiendo a usar NULL donde no sé el valor y considero que una cadena vacía es algo malo.
Después de algunas discusiones intensas con colegas, llegué con dos preguntas:
-
¿Tengo razón al suponer que el uso de una cadena vacía para un valor desconocido está causando que una base de datos "mienta" sobre los hechos? Para ser más precisos: utilizando la idea de SQL de qué es valor y qué no lo es, podría llegar a una conclusión: tenemos una dirección de correo electrónico, solo descubriendo que no es nula. Pero luego, cuando intente enviar un correo electrónico, llegaré a una conclusión contradictoria: no, no tenemos una dirección de correo electrónico, ¡que @! # $ Database debe haber estado mintiendo!
-
¿Existe algún escenario lógico en el que una cadena vacía '' pueda ser un portador tan bueno de información importante (además de valor y ningún valor), que sería problemático / ineficiente de almacenar de otra manera (como información adicional)? columna). He visto muchas publicaciones que afirman que a veces es bueno usar una cadena vacía junto con valores reales y NULL, pero hasta ahora no he visto un escenario que sería lógico (en términos de diseño de SQL / DB).
P.S. Algunas personas se verán tentadas a responder que es solo una cuestión de gusto personal. No estoy de acuerdo Para mí es una decisión de diseño con importantes consecuencias. Así que me gustaría ver respuestas donde la opinión sobre esto esté respaldada por algunas razones lógicas y / o técnicas.