none
Campos de la base de datos a NULL o vacíos?

    Pregunta

  • Pues eso señores he estado buscando información pero no me terminan de convencer las respuestas que veo. ¿Qué opinan que es mejor?

    Muchas gracias y un saludo

    miércoles, 3 de junio de 2015 16:12

Respuestas

  • Hola Josean,

    Creo que el ejemplo que nos propone Alberto no fue el preciso para disipar dudas. Insisto en la posición de que las columnas no deberían guardar valores inconsistentes o con significado ambiguo. Si el usuario no ingreso un valor entonces se almacena NULL. Una de las propiedades de una columna es la opcionalidad, si la columna podría no contener valores entonces se permite valores Null. La única manera que creo que podría ser válido usar caracteres de espacio en blanco (que aun así sigue siendo una mala practica) es cuando defines una columna como obligatorio pero que en algunos casos no se asignan valores, en ese caso no puedes ingresar NULL, insisto que ni siquiera ello es correcto.

    Discrepo en el ejemplo que nos propone Alberto porque NULL significa que el apellido no ha sido ingresado, sea porque no lo proporcionaron o porque simplemente no tiene (creo que es un caso atípico), pero ese "análisis" no debería estar contenido e una base de datos, porque finalmente cuando ese valor sea leído en un formulario el textbox aparecerá en blanco y ahí no sabremos si es porque el valor en base de datos es Null o "".


    miércoles, 3 de junio de 2015 18:30
  • hola

    en realidad todos vamos por el mismo camino, si el campo es opcional registra un null

    pero cuando trabajes con ese dato ten en cuenta de agregar validaciones que pregunten si es DbNull ya que si lo accedes directo tendras un fallo

    habiendo dicho esto por supuesto ha excepciones, si el campo es un simple comentario en ese caso podrias guardar un string vacio, por lo general el null en un campo se usa en las relaciones entre tablas opcionales, en los campos fecha

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 3 de junio de 2015 18:32

Todas las respuestas

  • hola

    pero que deberias opinar? no entendi lo que planteas

    si hay un campo null podrias validarlo usando

    if(row["campo"] != DbNull.Value){

    }

    de esta forma podrias ver si el contenido es nulo y no accederloa

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 3 de junio de 2015 16:15
  • Hola Josean_85 si lo que buscas es como validar datos o registros o valores de las columnas de tus tablas en sql podrias aplciar por ejemplo:

    Select * from MiTabla where MiColumna Is Not NULL;

    Y en C# (Como menciona Leandro) lo validarías usando un if.

    Ultimo si te refieres a cual es mejor si es vació o null, pues de ambas maneras puedes lograr validar datos. Pero lo mas recomendable seria que sean nulos puesto que varias registros pueden tener datos vacios por un tema de casuisticas y pues entonces ahí vendría un problema estarías restringiendo una columna que permite vacios con tu condicional if, ahora si es null ahí si validarías de una manera mas adecuada, puesto que los valores nulos no son comparables con otros tipos de datos.

    Saludos.


    miércoles, 3 de junio de 2015 16:28
  • Hola,

    Creo que la respuesta es unánime. El concepto de caracteres de espacio en blanco no debería ser contemplado en una columna de base de datos. Los caracteres de espacio en blanco sólo podrían suceder en columnas de texto, pero en las columnas de tipo numérico, fecha, imagen, etc no existe el espacio en blanco. Por tanto, si un valor no existe se define como NULL.

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.

    Willams Morales
    Arequipa - PERÚ

    miércoles, 3 de junio de 2015 16:33
  • Hola, asi de simple:

    Null != Vacio por lo tanto por buenas practicas,

    si no deseas guardar cierto dato Guardalo como NULL y no como Vacio("").

    Saludos.


    Jhon Tello Lumbreras.
    Lima - Perú.

    "Cada día se aprende algo nuevo"
    Si el post resolvió tu pregunta, márcala como respuesta.

    miércoles, 3 de junio de 2015 16:54
  • hola

    si en la operacion de insert usas parametros podrias usar

    if(TextBox1.Text == "")
       cmd.Parameters.AddWithValue("@param", DbNull.Value);
    else 
       cmd.Parameters.AddWithValue("@param", TextBox1.Text);
    
    


    Nota: tambien se puede escribir en una linea, pero para que quede mas claro lo puse en un if

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 3 de junio de 2015 17:26
  • Hola,

    Creo que la respuesta es unánime. El concepto de caracteres de espacio en blanco no debería ser contemplado en una columna de base de datos. Los caracteres de espacio en blanco sólo podrían suceder en columnas de texto, pero en las columnas de tipo numérico, fecha, imagen, etc no existe el espacio en blanco. Por tanto, si un valor no existe se define como NULL.

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.

    Willams Morales
    Arequipa - PERÚ

    Exactamente me refiero a eso a textBoxes que dejo en blanco en un formulario. Al guardarlos en la base de datos se guarda el espacio en blanco. A las fechas que no me interesa meter (por ejemplo el campo de fecha de baja de un usuario que no está dado aún de baja) las dejo como null.


    • Editado Josean_85 miércoles, 3 de junio de 2015 18:14
    miércoles, 3 de junio de 2015 17:28
  • Hola Josean,

    De acuerdo, desde tu aplicación deberás validar que bajo ninguna acción se envíen valores conteniendo caracteres de espacios en blanco. Para que no suceda ello bastará con hacer lo que te sugiere Leandro. Además de ello siempre queda bien quitar los caracteres de espacios en blanco que podrían estar al inicio o fin de la cadena y para ello te bastará con aplicar el método ToTrim al TextBox. Yo modificaría lo sugerido bajo la siguiente forma:

    if(string.IsNullOrEmpty(TextBox1.Text))
       cmd.Parameters.AddWithValue("@param", DbNull.Value);
    else 
       cmd.Parameters.AddWithValue("@param", TextBox1.Text.Trim());


    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.

    Willams Morales
    Arequipa - PERÚ


    miércoles, 3 de junio de 2015 17:33
  • Un ejemplo de diferencia entre blanco y null: Suponte un campo de base de datos que es "segundo apellido". Si se deja con NULL, significa "no sabemos cuál es el segundo apellido de esta persona". Si se deja con una cadena vacía significa "sabemos que esta persona no tiene segundo apellido".
    miércoles, 3 de junio de 2015 17:37
    Moderador
  • Pues si no he entendido mal Williams y Leandro proponéis que no guarde en la base de datos cadenas vacías y, en cambio Alberto me dice que distinga entre cadenas vacías y valores null. Ahora no sé para donde tirar jeje.
    miércoles, 3 de junio de 2015 18:19
  • Hola Josean,

    Creo que el ejemplo que nos propone Alberto no fue el preciso para disipar dudas. Insisto en la posición de que las columnas no deberían guardar valores inconsistentes o con significado ambiguo. Si el usuario no ingreso un valor entonces se almacena NULL. Una de las propiedades de una columna es la opcionalidad, si la columna podría no contener valores entonces se permite valores Null. La única manera que creo que podría ser válido usar caracteres de espacio en blanco (que aun así sigue siendo una mala practica) es cuando defines una columna como obligatorio pero que en algunos casos no se asignan valores, en ese caso no puedes ingresar NULL, insisto que ni siquiera ello es correcto.

    Discrepo en el ejemplo que nos propone Alberto porque NULL significa que el apellido no ha sido ingresado, sea porque no lo proporcionaron o porque simplemente no tiene (creo que es un caso atípico), pero ese "análisis" no debería estar contenido e una base de datos, porque finalmente cuando ese valor sea leído en un formulario el textbox aparecerá en blanco y ahí no sabremos si es porque el valor en base de datos es Null o "".


    miércoles, 3 de junio de 2015 18:30
  • hola

    en realidad todos vamos por el mismo camino, si el campo es opcional registra un null

    pero cuando trabajes con ese dato ten en cuenta de agregar validaciones que pregunten si es DbNull ya que si lo accedes directo tendras un fallo

    habiendo dicho esto por supuesto ha excepciones, si el campo es un simple comentario en ese caso podrias guardar un string vacio, por lo general el null en un campo se usa en las relaciones entre tablas opcionales, en los campos fecha

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 3 de junio de 2015 18:32