Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Usar Valores Nulos En Registros Que No Se Conoce Un Valor De Sus Campos
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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")
 


 
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Lunes, 13 Junio 2016, 18:49; editado 2 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
No podemos regresar
 
última edición por shordi el Lunes, 13 Junio 2016, 19:04; editado 1 vez 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Martes, 14 Junio 2016, 08:57; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Encontrar Registros Con Un Mismo Valor Par... bies88 Bases de Datos 2 Martes, 17 Agosto 2010, 23:22 Ver último mensaje
bies88
No hay nuevos mensajes Telcelgb: Conoce Tu Saldo razaAztk Aplicaciones/Fragmentos de Código 1 Viernes, 23 Septiembre 2016, 10:07 Ver último mensaje
shordi
No hay nuevos mensajes Como Crear Un Valor Que Se Autoincremente ... metalgearxd Bases de Datos 14 Jueves, 05 Octobre 2017, 17:48 Ver último mensaje
shordi
No hay nuevos mensajes La Clase Collection No Se Lleva Bien Con L... tincho Aplicaciones/Fragmentos de Código 2 Viernes, 05 Julio 2019, 12:22 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron