Usar Valores Nulos En Registros Que No Se Conoce Un Valor De Sus Campos


Objetivo: Usar Valores Nulos En Registros Que No Se Conoce Un Valor De Sus Campos
Buenas!.

Me gustaría preguntaros vuestra opinión sobre esto.

Imaginar que conocéis el nombre de la región mundial pero no conocéis la población.
¿ Usarías null ?.

Distinto es el nombre de la región.

conexion.Exec("CREATE TABLE PobPorRegion(Region TEXT NOT NULL, Poblacion INTEGER)")
conexion.Exec("INSERT INTO PobPorRegion VALUES('Europa Occidental',387933)")
conexion.Exec("INSERT INTO PobPorRegion VALUES('Marte', NULL)")


¿ Usarías mejor un valor como cero, una cadena vacía o el valor Falso ?.

Los expertos no recomiendan el uso de Null.

En el caso de que se quiera recordar que poblaciones tienen un valor nulo para cambiarlas,
podríamos hacer:

conexion.Exec("SELECT * FROM PobPorRegion WHERE Poblacion IS NULL")


Los problemas vienen si usamos NULL y hacemos operaciones lógicas.

...Es que en SQL no existe el blanco y negro, o verdadero y falso..null..es desconocido, el tercer valor lógico.
Claro que usar NULL, depende también del gestor de base de datos.

Se debería usar con precaución.

Saludos

Objetivo: Re: Usar Valores Nulos En Registros Que No Se Conoce Un Valor De Sus Campos
Me encontré un pequeño problema. Ahora quiero cambiar a un valor el registro cuyo campo poblacion es null.

Puedo hacer esto:

conexion.Exec("UPDATE PobPorRegion SET Poblacion=100000 WHERE Region='Japon'")


Pero no puedo hacer esto:

conexion.Exec("UPDATE PobPorRegion SET Poblacion = 0 WHERE Poblacion IS NULL")



última edición por Shell el Lunes, 13 Junio 2016, 18:49; editado 2 veces
Objetivo: Re: Usar Valores Nulos En Registros Que No Se Conoce Un Valor De Sus Campos
Debieras eludir siempre el null. No tiene ningún sentido. Si tienes que trabajar con el contenido de los campos es muuuucho mejor saber de antemano con qué te vas a enfrentar. Un campo vacío sigue teniendo un valor cadena vacía, 0, lo que sea, pero un valor que puedes evaluar. Null es la ausencia de valor y la posibilidad de que eso ocurra te complicará la lógica de toda operación que quieras evaluar sobre ese campo:
Ahora tendrás siempre y en cada una de las operaciones que comprobar si es null o no y si no lo es entonces evaluar el contenido.

Recuerda también que gambas no implementa por defecto los atajos lógicos en la evaluación de las expresiones, es decir:

Si el campo A puede tener un valor null cuando debería ser numérico, no te vale esto:

If not isnull(miresult!A) and miresult!A > 0 then ....


gambas, antes de decidir si la expresión es cierta o falsa evalúa cada uno de sus elementos, el isnull y el > 0, y éste último generará un error de comparación. Tendrás que codificar siempre:

If not isnull (miresult!A) then
if miresult!A > 0 then
....
endif
endif


Dice el Benoit que si codificas

if not isnull(miresult!a) and if miresult!A > 0

Entonces la evaluación se detiene en la primera expresión y no se genera error.
No lo he probado, pero ¿qué necesidad hay de todo esto?, que cada campo contenga un valor de su tipo (con Mysql es automático, con SQLite tienes que añadir la restricción default en la definición de la columna) y no tendrás ningún problema ni complicación.

Saludos

última edición por shordi el Lunes, 13 Junio 2016, 19:04; editado 1 vez
Perfil MP  
Objetivo: Re: Usar Valores Nulos En Registros Que No Se Conoce Un Valor De Sus Campos
Shordi:

Vale, entonces null desechado para esto.

shordi escribió: [Ver mensaje]

Dice el Benoit que si codificas

if not isnull(miresult!a) and if miresult!A > 0

Entonces la evaluación se detiene en la primera expresión y no se genera error.
No lo he probado, pero ¿qué necesidad hay de todo esto?, que cada campo contenga un valor de su tipo (con Mysql es automático, con SQLite tienes que añadir la restricción default en la definición de la columna) y no tendrás ningún problema ni complicación.


Puede que para base de datos no sea necesario usar este tipo de expresión.
Pero se usa para otras cosa, son los llamado cortacircuitos. Y funcionan.

Saludos

última edición por Shell el Martes, 14 Junio 2016, 08:57; editado 1 vez

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.1239s (PHP: -22% SQL: 122%)
Consultas SQL: 26 - Debug off - GZIP Activado