to NULL or not to NULL this is the question

09/11/2004 - 23:53 por Jose Luis | Informe spam
En primer lugar saludos al gupo.

En segundo lugar una consulta acerca de un tema sobre los valores null y sql

Estoy trabajando con mssql server developer realizando el cambio de un
programa de ficheros planos a sql,
es la primera vez que trabajo con una base de datos sql despues de años
trabajando con ficheros 'normales',
y la primera duda que me surge es acerca de los valores null

por lo visto hasta ahora los valores null nos complican la vida a la hora de
realizar consultas,
calculos y demas operaciones
ejemplo 1) si sumo varias columnas numericas y una vale null el resultado es
null
ejemplo 2) al realizar comparaciones de cadenas de caracteres una cadena con
valor null
no es lo mismo que una cadena en blanco,etc,etc

la idea que he tenido y seguro que se le ha ocurrido a todos los que han
pasado por esto antes que yo es la siguiente:
iniciar todos los campos con un valor en blanco del tipo de dato que
corresponda
esto es definir en la base de datos como predeterminado todos los campos
de caracteres como '', y los numericos como 0,
pero que hago con los de fecha ?
no estoy seguro si es una buena idea, o si es mejor dejar el valor null y
cargar con el escribiendo en cada consulta
( Campo IS NULL OR Campo = '' )
si sql tiene el valor null sera por algo,
o no ?

Gracias.

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera [MVP]
10/11/2004 - 00:44 | Informe spam
Depende de la semántica de tus datos. Se considera al valor NULL como "valor
desconocido", en algunos sistemas tiene sentido y en otros no. Si tienes un
dato de tipo char, entonces tienes estas posibilidades:

1. Que el dato sea conocido, valiendo 'algo' o que seal string nulo '' (dos
comillas simples).

2. Que el dato sea desconocido, no ha sido ingresado a la base de datos.
Este es el valor NULL.

Importante notar que '' es un string nulo, es el valor nulo del dominio de
los strings pero NO ES DESCONOCIDO. Mientras que NULL es un valor QUE NO SE
CONOCE. Por lo tanto no debe considerarse en las operaciones.

Hay implementaciones donde se usan valores conocidos como '' o -1 o 9999 o
99/99/99 cosas por el estilo para indicar valores desconocidos o especiales
para los procesos. En mi opinión no es una buiena práctica en las bases de
datos.

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Jose Luis" wrote in message
news:
En primer lugar saludos al gupo.

En segundo lugar una consulta acerca de un tema sobre los valores null y
sql

Estoy trabajando con mssql server developer realizando el cambio de un
programa de ficheros planos a sql,
es la primera vez que trabajo con una base de datos sql despues de años
trabajando con ficheros 'normales',
y la primera duda que me surge es acerca de los valores null

por lo visto hasta ahora los valores null nos complican la vida a la hora
de
realizar consultas,
calculos y demas operaciones
ejemplo 1) si sumo varias columnas numericas y una vale null el resultado
es
null
ejemplo 2) al realizar comparaciones de cadenas de caracteres una cadena
con
valor null
no es lo mismo que una cadena en blanco,etc,etc

la idea que he tenido y seguro que se le ha ocurrido a todos los que han
pasado por esto antes que yo es la siguiente:
iniciar todos los campos con un valor en blanco del tipo de dato que
corresponda
esto es definir en la base de datos como predeterminado todos los
campos
de caracteres como '', y los numericos como 0,
pero que hago con los de fecha ?
no estoy seguro si es una buena idea, o si es mejor dejar el valor null y
cargar con el escribiendo en cada consulta
( Campo IS NULL OR Campo = '' )
si sql tiene el valor null sera por algo,
o no ?

Gracias.




Respuesta Responder a este mensaje
#2 Jose Luis
10/11/2004 - 08:15 | Informe spam
Gracias por la informacion.
En mi caso en los campos caracter y numericos solo necesito saber si el
usuario introdujo un valor o si lo dejo en blanco, luego los valores null
solo me complican la vida pues debo comprobar dos posibles valores para un
campo sin datos ( en blanco y null ), por lo que en estos casos optare por
iniciar todos los campos a su valor en blanco ( '' y 0 )
en cuanto a los de fecha dejare el valor null para comprobar la ausencia de
fecha ya que creo que es la unica forma de comprobarlo en este caso
Mi pregunta era si esta idea de iniciar todos los campos por defecto es una
practica corriente o si tiene luego a la hora de desarrollar un programa
algun 'efecto secundario'

"Gustavo Larriera [MVP]" escribió en el mensaje
news:
Depende de la semántica de tus datos. Se considera al valor NULL como


"valor
desconocido", en algunos sistemas tiene sentido y en otros no. Si tienes


un
dato de tipo char, entonces tienes estas posibilidades:

1. Que el dato sea conocido, valiendo 'algo' o que seal string nulo ''


(dos
comillas simples).

2. Que el dato sea desconocido, no ha sido ingresado a la base de datos.
Este es el valor NULL.

Importante notar que '' es un string nulo, es el valor nulo del dominio de
los strings pero NO ES DESCONOCIDO. Mientras que NULL es un valor QUE NO


SE
CONOCE. Por lo tanto no debe considerarse en las operaciones.

Hay implementaciones donde se usan valores conocidos como '' o -1 o 9999 o
99/99/99 cosas por el estilo para indicar valores desconocidos o


especiales
para los procesos. En mi opinión no es una buiena práctica en las bases de
datos.

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Jose Luis" wrote in message
news:
> En primer lugar saludos al gupo.
>
> En segundo lugar una consulta acerca de un tema sobre los valores null y
> sql
>
> Estoy trabajando con mssql server developer realizando el cambio de un
> programa de ficheros planos a sql,
> es la primera vez que trabajo con una base de datos sql despues de años
> trabajando con ficheros 'normales',
> y la primera duda que me surge es acerca de los valores null
>
> por lo visto hasta ahora los valores null nos complican la vida a la


hora
> de
> realizar consultas,
> calculos y demas operaciones
> ejemplo 1) si sumo varias columnas numericas y una vale null el


resultado
> es
> null
> ejemplo 2) al realizar comparaciones de cadenas de caracteres una cadena
> con
> valor null
> no es lo mismo que una cadena en blanco,etc,etc
>
> la idea que he tenido y seguro que se le ha ocurrido a todos los que han
> pasado por esto antes que yo es la siguiente:
> iniciar todos los campos con un valor en blanco del tipo de dato que
> corresponda
> esto es definir en la base de datos como predeterminado todos los
> campos
> de caracteres como '', y los numericos como 0,
> pero que hago con los de fecha ?
> no estoy seguro si es una buena idea, o si es mejor dejar el valor null


y
> cargar con el escribiendo en cada consulta
> ( Campo IS NULL OR Campo = '' )
> si sql tiene el valor null sera por algo,
> o no ?
>
> Gracias.
>
>
>
>



Respuesta Responder a este mensaje
#3 ulises
10/11/2004 - 14:37 | Informe spam
De acuerdo con el excelente apunte de Gustavo, pero usaría
el término "ausencia de valor" en lugar de "valor
desconocido", como opinión personal si vas a inicializar
siempre tus campos está demás que declares los campos como
NULL, define como NOT NULL y agrega un DEFAULT a la columna.

Saludos,
Ulises

Gracias por la informacion.
En mi caso en los campos caracter y numericos solo


necesito saber si el
usuario introdujo un valor o si lo dejo en blanco, luego


los valores null
solo me complican la vida pues debo comprobar dos posibles


valores para un
campo sin datos ( en blanco y null ), por lo que en estos


casos optare por
iniciar todos los campos a su valor en blanco ( '' y 0 )
en cuanto a los de fecha dejare el valor null para


comprobar la ausencia de
fecha ya que creo que es la unica forma de comprobarlo en


este caso
Mi pregunta era si esta idea de iniciar todos los campos


por defecto es una
practica corriente o si tiene luego a la hora de


desarrollar un programa
algun 'efecto secundario'

"Gustavo Larriera [MVP]"


escribió en el mensaje
news:
Depende de la semántica de tus datos. Se considera al




valor NULL como
"valor
desconocido", en algunos sistemas tiene sentido y en




otros no. Si tienes
un
dato de tipo char, entonces tienes estas posibilidades:

1. Que el dato sea conocido, valiendo 'algo' o que seal




string nulo ''
(dos
comillas simples).

2. Que el dato sea desconocido, no ha sido ingresado a




la base de datos.
Este es el valor NULL.

Importante notar que '' es un string nulo, es el valor




nulo del dominio de
los strings pero NO ES DESCONOCIDO. Mientras que NULL es




un valor QUE NO
SE
CONOCE. Por lo tanto no debe considerarse en las




operaciones.

Hay implementaciones donde se usan valores conocidos




como '' o -1 o 9999 o
99/99/99 cosas por el estilo para indicar valores




desconocidos o
especiales
para los procesos. En mi opinión no es una buiena




práctica en las bases de
datos.

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y




no otorga ningun
derecho / This posting is provided "AS IS" with no




warranties, and confers
no rights.
"Jose Luis" wrote in message
news:
> En primer lugar saludos al gupo.
>
> En segundo lugar una consulta acerca de un tema sobre




los valores null y
> sql
>
> Estoy trabajando con mssql server developer realizando




el cambio de un
> programa de ficheros planos a sql,
> es la primera vez que trabajo con una base de datos




sql despues de años
> trabajando con ficheros 'normales',
> y la primera duda que me surge es acerca de los




valores null
>
> por lo visto hasta ahora los valores null nos




complican la vida a la
hora
> de
> realizar consultas,
> calculos y demas operaciones
> ejemplo 1) si sumo varias columnas numericas y una




vale null el
resultado
> es
> null
> ejemplo 2) al realizar comparaciones de cadenas de




caracteres una cadena
> con
> valor null
> no es lo mismo que una cadena en blanco,etc,etc
>
> la idea que he tenido y seguro que se le ha ocurrido a




todos los que han
> pasado por esto antes que yo es la siguiente:
> iniciar todos los campos con un valor en blanco del




tipo de dato que
> corresponda
> esto es definir en la base de datos como




predeterminado todos los
> campos
> de caracteres como '', y los numericos como 0,
> pero que hago con los de fecha ?
> no estoy seguro si es una buena idea, o si es mejor




dejar el valor null
y
> cargar con el escribiendo en cada consulta
> ( Campo IS NULL OR Campo = '' )
> si sql tiene el valor null sera por algo,
> o no ?
>
> Gracias.
>
>
>
>








.

Respuesta Responder a este mensaje
#4 Jose Luis
10/11/2004 - 14:46 | Informe spam
exactamente esa es la estrategia

campos numericos: no permitir null, default 0
campos de caracteres: no permitir null, default ''
campos de fecha: permitir null

me parece lo mas logico y sencillo, simplifica el trabajo posterior con los
datos en consultas, actualizaciones, etc.


"ulises" escribió en el mensaje
news:4fb301c4c72a$5f934f60$
De acuerdo con el excelente apunte de Gustavo, pero usaría
el término "ausencia de valor" en lugar de "valor
desconocido", como opinión personal si vas a inicializar
siempre tus campos está demás que declares los campos como
NULL, define como NOT NULL y agrega un DEFAULT a la columna.

Saludos,
Ulises

Gracias por la informacion.
En mi caso en los campos caracter y numericos solo


necesito saber si el
usuario introdujo un valor o si lo dejo en blanco, luego


los valores null
solo me complican la vida pues debo comprobar dos posibles


valores para un
campo sin datos ( en blanco y null ), por lo que en estos


casos optare por
iniciar todos los campos a su valor en blanco ( '' y 0 )
en cuanto a los de fecha dejare el valor null para


comprobar la ausencia de
fecha ya que creo que es la unica forma de comprobarlo en


este caso
Mi pregunta era si esta idea de iniciar todos los campos


por defecto es una
practica corriente o si tiene luego a la hora de


desarrollar un programa
algun 'efecto secundario'

"Gustavo Larriera [MVP]"


escribió en el mensaje
news:
Depende de la semántica de tus datos. Se considera al




valor NULL como
"valor
desconocido", en algunos sistemas tiene sentido y en




otros no. Si tienes
un
dato de tipo char, entonces tienes estas posibilidades:

1. Que el dato sea conocido, valiendo 'algo' o que seal




string nulo ''
(dos
comillas simples).

2. Que el dato sea desconocido, no ha sido ingresado a




la base de datos.
Este es el valor NULL.

Importante notar que '' es un string nulo, es el valor




nulo del dominio de
los strings pero NO ES DESCONOCIDO. Mientras que NULL es




un valor QUE NO
SE
CONOCE. Por lo tanto no debe considerarse en las




operaciones.

Hay implementaciones donde se usan valores conocidos




como '' o -1 o 9999 o
99/99/99 cosas por el estilo para indicar valores




desconocidos o
especiales
para los procesos. En mi opinión no es una buiena




práctica en las bases de
datos.

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y




no otorga ningun
derecho / This posting is provided "AS IS" with no




warranties, and confers
no rights.
"Jose Luis" wrote in message
news:
> En primer lugar saludos al gupo.
>
> En segundo lugar una consulta acerca de un tema sobre




los valores null y
> sql
>
> Estoy trabajando con mssql server developer realizando




el cambio de un
> programa de ficheros planos a sql,
> es la primera vez que trabajo con una base de datos




sql despues de años
> trabajando con ficheros 'normales',
> y la primera duda que me surge es acerca de los




valores null
>
> por lo visto hasta ahora los valores null nos




complican la vida a la
hora
> de
> realizar consultas,
> calculos y demas operaciones
> ejemplo 1) si sumo varias columnas numericas y una




vale null el
resultado
> es
> null
> ejemplo 2) al realizar comparaciones de cadenas de




caracteres una cadena
> con
> valor null
> no es lo mismo que una cadena en blanco,etc,etc
>
> la idea que he tenido y seguro que se le ha ocurrido a




todos los que han
> pasado por esto antes que yo es la siguiente:
> iniciar todos los campos con un valor en blanco del




tipo de dato que
> corresponda
> esto es definir en la base de datos como




predeterminado todos los
> campos
> de caracteres como '', y los numericos como 0,
> pero que hago con los de fecha ?
> no estoy seguro si es una buena idea, o si es mejor




dejar el valor null
y
> cargar con el escribiendo en cada consulta
> ( Campo IS NULL OR Campo = '' )
> si sql tiene el valor null sera por algo,
> o no ?
>
> Gracias.
>
>
>
>








.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida