Es incorrecto el uso de null

30/11/2007 - 16:31 por Imac_man | Informe spam
Saludos amigos,

mis preguntas son las siguientes:

1. ¿Es una mala practica permitir que los campos de mis tablas acepten
null?, si es asi ¿que es lo correcto cuando no quiero que se guarde algo en
los campos.?
2.¿El usar null en la mayoria de mis tablas hace que los tiempos de
respuesta en los querys se vean afectados?

gracias de antemano

Preguntas similare

Leer las respuestas

#6 Alfredo Novoa
02/12/2007 - 00:33 | Informe spam
On 30 nov, 19:30, "Leonardo Azpurua" <l e o n a r d o [arroba] m v p s
[punto] o r g> wrote:

> Bueno, esto sería que cada atributo de una tupla tiene un valor.

Por otra parte, el dominio real de la categoría representada (mediante un
tipo de dato definido para el SGBD)



Un dominio real que yo sepa es un conjunto de numeros reales, y con lo
de categoría representada no se muy bien a que te refieres.

puede incluir el valor NULL.



Eso si que no, un nulo no es un valor y nunca puede pertenecer a un
dominio, y menos a uno real.

Para el
caso de la Edad, por ejemplo, encuentro más correcto NULL (desconocida, no
disponible) que -1 (que sin duda está fuera del dominio de las edades
aunque forme parte del dominio de los enteros).



Pues por lo menos es un valor, cosa que un nulo no es. Pero mejor
partir las tablas.

Desde un punto de vista teórico, es igual de correcto o incorrecto usar NULL
que -1.



No, por que con un nulo rompes el Modelo Relacional y con un -1 no.

No tengo ningún problema con los NULL. De hecho, para el caso de datos como
las edades, el uso de valores artificiales (-1, por ejemplo) invalida los
resultados devueltos por cualquier función estadistica: SELECT AVG(Edad) se
vería alterado por los -1, pero no por los NULL.



Si, eso si. Pero partiendo las tablas funciona igual.


Saludos
Respuesta Responder a este mensaje
#7 Carlos M. Calvelo
02/12/2007 - 09:29 | Informe spam
Hola Alfredo,

On 2 dec, 00:33, Alfredo Novoa wrote:
On 30 nov, 19:30, "Leonardo Azpurua" <l e o n a r d o [arroba] m v p s
[punto] o r g> wrote:

> > Bueno, esto sería que cada atributo de una tupla tiene un valor.

> Por otra parte, el dominio real de la categoría representada (mediante un
> tipo de dato definido para el SGBD)

Un dominio real que yo sepa es un conjunto de numeros reales, y con lo
de categoría representada no se muy bien a que te refieres.



No creo que se haya querido referir a los números reales.
Mas bien habrá querido decir 'real' como en 'de verdad'.


> puede incluir el valor NULL.

Eso si que no, un nulo no es un valor y nunca puede pertenecer a un
dominio, y menos a uno real.

> Para el
> caso de la Edad, por ejemplo, encuentro más correcto NULL (desconocida, no
> disponible) que -1 (que sin duda está fuera del dominio de las edades
> aunque forme parte del dominio de los enteros).

Pues por lo menos es un valor, cosa que un nulo no es. Pero mejor
partir las tablas.

> Desde un punto de vista teórico, es igual de correcto o incorrecto usar NULL
> que -1.

No, por que con un nulo rompes el Modelo Relacional y con un -1 no.



Yo entiendo que ese valor -1 no pertenece al dominio de las edades.
Entonces estoy de acuerdo con Leonardo en que si fuera posible
asignar valores no pertenecientes al dominio de un atributo es
tan correcto o incorrecto como asignar null.
Sería mas confuso todavía, porque para el null está claro que no
pertenece a ningún dominio y el -1 no pertenecería al dominio
de las edades pero si a otros (enteros por ejemplo).
Dicho de otra forma, el null nunca es un valor pero el -1
lo sería en unos casos y en otros no. De ahí que me parece
mas confuso.


> No tengo ningún problema con los NULL. De hecho, para el caso de datos como
> las edades, el uso de valores artificiales (-1, por ejemplo) invalida los
> resultados devueltos por cualquier función estadistica: SELECT AVG(Edad) se
> vería alterado por los -1, pero no por los NULL.

Si, eso si. Pero partiendo las tablas funciona igual.




Mejor partir las tablas si.

Saludos,
Carlos
Respuesta Responder a este mensaje
#8 Leonardo Azpurua
02/12/2007 - 14:10 | Informe spam
"Alfredo Novoa" escribió en el mensaje
news:
On 30 nov, 19:30, "Leonardo Azpurua" <l e o n a r d o [arroba] m v p s
[punto] o r g> wrote:

> Bueno, esto sería que cada atributo de una tupla tiene un valor.

Por otra parte, el dominio real de la categoría representada (mediante un
tipo de dato definido para el SGBD)



Un dominio real que yo sepa es un conjunto de numeros reales, y con lo
de categoría representada no se muy bien a que te refieres.

puede incluir el valor NULL.



Eso si que no, un nulo no es un valor y nunca puede pertenecer a un
dominio, y menos a uno real.

Para el
caso de la Edad, por ejemplo, encuentro más correcto NULL (desconocida, no
disponible) que -1 (que sin duda está fuera del dominio de las edades
aunque forme parte del dominio de los enteros).



Pues por lo menos es un valor, cosa que un nulo no es. Pero mejor
partir las tablas.

Desde un punto de vista teórico, es igual de correcto o incorrecto usar
NULL
que -1.



No, por que con un nulo rompes el Modelo Relacional y con un -1 no.

No tengo ningún problema con los NULL. De hecho, para el caso de datos
como
las edades, el uso de valores artificiales (-1, por ejemplo) invalida los
resultados devueltos por cualquier función estadistica: SELECT AVG(Edad)
se
vería alterado por los -1, pero no por los NULL.



Si, eso si. Pero partiendo las tablas funciona igual.
-

Hola:

Un dominio real es un dominio que representa algo que existe en la realidad,
y la categoría representada es el universo que se representa mediante ese
dominio: edades, sueldos, nombres, distancias, etc. El Dominio de los
Numeros Reales es otra cosa que no tiene nada que ver con la discusión.

Cuando "partes las tablas", simplemente estás aumentando la complejidad del
modelo sin ningún beneficio en la visión conceptual del modelo. Las tuplas
creadas artificialmente no tienen sentido por si sólas; necesariamente debes
usarlas dentro de un JOIN, y cuando las uses dentro del JOIN pueden pasar
dos cosas: que desaparezca la tupla principal si no existe la dependiente, o
que te aparezca un NULL. El primer caso es malo. El segundo es lo mismo que
si tuvieramos el NULL dentro de la tabla.

Muy bonito lo de preservar el modelo relacional. No soy exactamente un
maestro en la teoría de las BD relacionales, pero tengo entendido que el
NULL forma parte de la definición, exactamente con el fin de permitir la
existencia de tuplas para las cuales algun valor no esté definido.

En la práctica, entonces, y salvo por la violación de un dogma (la unica
noticia de cuya existencia es tu afirmación), es exactamente igual partir
las tablas que aceptar NULL. Y como una tabla es siempre mejor que dos,
prefiero usar NULL en la tabla principal que partirla en dos para igual
tener que lidiar con los NULL en la vista.


Salud!
Respuesta Responder a este mensaje
#9 Alfredo Novoa
02/12/2007 - 15:24 | Informe spam
Hola Carlos,

On 2 dic, 09:29, "Carlos M. Calvelo" wrote:
Hola Alfredo,
No creo que se haya querido referir a los números reales.
Mas bien habrá querido decir 'real' como en 'de verdad'.



Pues que me expliquen que es un dominio de mentira :-)

> > Desde un punto de vista teórico, es igual de correcto o incorrecto usar NULL
> > que -1.

> No, por que con un nulo rompes el Modelo Relacional y con un -1 no.

Yo entiendo que ese valor -1 no pertenece al dominio de las edades.
Entonces estoy de acuerdo con Leonardo en que si fuera posible
asignar valores no pertenecientes al dominio de un atributo es
tan correcto o incorrecto como asignar null.



Pero obviamente no es posible, asi que ni me lo planteo.

Sería mas confuso todavía, porque para el null está claro que no
pertenece a ningún dominio y el -1 no pertenecería al dominio
de las edades pero si a otros (enteros por ejemplo).
Dicho de otra forma, el null nunca es un valor pero el -1
lo sería en unos casos y en otros no. De ahí que me parece
mas confuso.



El -1 siempre es un valor, si quieres permitirlo en una columna de
edades es tu problema.

Si lo permites luego no puedes decir que es incorrecto. Con los nulos
igual, pero si los permites luego no puedes decir que tienes una base
de datos relacional.


Saludos
Alfredo
Respuesta Responder a este mensaje
#10 Alfredo Novoa
02/12/2007 - 16:46 | Informe spam
Hola Leonardo,

On 2 dic, 14:10, "Leonardo Azpurua" <l e o n a r d o [arroba] m v p s
[punto] o r g> wrote:

Un dominio real es un dominio que representa algo que existe en la realidad,



Pues es la primera vez que veo tal cosa.

y la categoría representada es el universo que se representa mediante ese
dominio: edades, sueldos, nombres, distancias, etc.



Un dominio no representa ningún universo paralelo. Y ese uso de la
palabra categoría no viene en el diccionario ni en ningún otro sitio
que conozca.

El significado de la palabra categoría que más tiene que ver con este
contexto sería el de grupo de tipos, o incluso podría ser un sinónimo
de tipo por que un grupo de tipos no deja de ser otro tipo.

El Dominio de los
Numeros Reales es otra cosa que no tiene nada que ver con la discusión.



Ya, pero si te inventas el significado de las palabras es muy difícil
seguirte.

Pero vamos, que entiendo lo que quieres decir: que -1 no es una edad.

Pero eso al SGBD le da igual. Podrá ser una opción de diseño todo lo
poco elegante que tu quieras, pero desde el punto de vista de la
lógica simbólica es perfectamente correcta.

Un SGBD es un ingenio logico-deductivo que sigue las reglas que le
marcas. Si permites que pongan un -1 en la edad y alguien lo pone pues
todo correcto. Luego tiene que haber una persona o programa que
interprete las tuplas correctamente.

En cambio si permitimos nulos pues ya no tenemos un ingenio lógico-
deductivo que funciona correctamente, por que el tratamiento de los
nulos es lógicamente inconsistente. Una tupla con nulos deja de
corresponder a una proposición lógica y habrá consultas que devuelvan
resultados incoherentes.

Cuando "partes las tablas", simplemente estás aumentando la complejidad del
modelo sin ningún beneficio en la visión conceptual del modelo.



No es cierto, no se aumenta de ninguna manera la complejidad del
diseño por que se sigue representando la misma información.

Y yo creo que así el modelo representa más fielmente la realidad, por
que ni -1 ni null pueden ser edades.

Las tuplas
creadas artificialmente no tienen sentido por si sólas;



Ninguna tupla tiene sentido por si sola, tiene que haber algo o
alguien que las interprete.

necesariamente debes
usarlas dentro de un JOIN



Claro que no, todas las tuplas pueden interpretarse sin necesidad de
utilizar el operador de junta.

Por ejemplo (1, 30) puede significar que el cliente número 1 tiene 30
años. Esto evidentemente tiene sentido.

, y cuando las uses dentro del JOIN pueden pasar
dos cosas: que desaparezca la tupla principal si no existe la dependiente,



Lo cual representaría edad desconocida.

o
que te aparezca un NULL.



Esto nunca, quizás te estés confundiendo con el operador OUTER JOIN
que es completamente diferente a JOIN.

Para que un OUTER JOIN respete la lógica matemática (es decir: sea
relacional) no puede devolver nulos. O sea, que si no usas COALESCE te
estás cargando la lógica matemática.

El primer caso es malo.



No tiene por que ser malo.

El segundo es lo mismo que
si tuvieramos el NULL dentro de la tabla.



Correcto, por que efectivamente tenemos nulos dentro de una tabla. El
resultado de una consulta que devuelve una tabla es una tabla :-)

Muy bonito lo de preservar el modelo relacional.



Pues si, lo malo es que poca gente tiene presente que preservar el
Modelo Relacional es sinónimo de preservar la coherencia y la lógica
matemáticas. Creo que si la gente tuviese más presente esta
equivalencia, sabrían apreciar más adecuadamente el valor de preservar
eso del Modelo Relacional.

A lo mejor habría que usar menos la palabra "relacional" y más la
palabra "lógica".

No soy exactamente un
maestro en la teoría de las BD relacionales, pero tengo entendido que el
NULL forma parte de la definición, exactamente con el fin de permitir la
existencia de tuplas para las cuales algun valor no esté definido.



Todavía no hay unanimidad al respecto, pero la mayoría de los expertos
(sobre todo los buenos) consideran que los nulos fueron un error de
Codd y que no tienen cabida en el Modelo Relacional.

En la práctica, entonces, y salvo por la violación de un dogma (la unica
noticia de cuya existencia es tu afirmación)



Hombre, hay unas cosas que se llaman libros :-) Yo no me lo he
inventado.

Te puedo recomendar este para darle un repaso rápido a estos
conceptos:

http://www.amazon.co.uk/Database-De...0596100124

Y como una tabla es siempre mejor que dos,



Huy, esto es un disparate.


Saludos
Alfredo
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida