Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Problema con eliminaciones y claves ajenas

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Problema con eliminaciones y claves ajenas Responder citando

Hola:
Bueno, en primer lugar comentaros que mi problema no es algo que no sepa programar en Builder, si no más bien una duda con respecto a Bases de Datos. De todas maneras, siempre que he preguntado algo en el foro me habeis respondido, asi que espero que esta vez me podais volver a ayudar Smile
El hecho es que en mi base de datos tengo una tabla Persona y otra Ingreso, relacionadas 1 a n y con opcionalidad por ambas partes. (la clave ajena el Ingreso es el DNI de la persona) Es decir, una persona me puede generar varios ingresos, pero los ingresos no van a venir sólo por los pagos de las personas.
En mi aplicación, he de permitir eliminar a una persona en cualquier momento, pero me interesa mantener el ingreso asociado a ella, si es q existe, ya que si no no se manejaría bien la contabilidad.
Si elimino a la persona que tiene asociado un Ingreso directamente, se me lanza lógicamente una excepción ya que estoy violando la clave ajena de la tabla Ingreso, a pesar de que puede dejarse en blanco.
Cual sería una posible soluciónn a este problema? Podría buscar el registro de la tabla Ingreso que contiene el DNI de esa persona y ponerlo a null para que no me diese un error?
Muchas gracias de antemano por vuestra ayuda
Volver arriba
Mensaje    Asunto: Responder citando

Lo mejor es que te mires las Restricciones de Integridad Referencial soportadas por tu SGBD, depende del que tengas puedes tener las siguientes:

ON ... CASCADE
ON ... RESTRICT
ON ... SET DEFAULT
ON ... SET NULL
ON ... NO ACTION

Ahora no recuerdo más, pero ya te digo que depende de el SGBD, no chicos? vosotros que decís ?

Ciao.
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

de que BD hablas? Hasta donde se, todas permiten actualizaciones, modificaciones y eliminaciones en cascada.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Hola:
La base de datos que utilizo es Interbase, pero no entiendo lo que me comentais de las restricciones de integridad. No tengo puesta ninguna del tipo on delete cascade o on update cascade en la tabla Ingreso cuando se borra la persona (precisamente es lo que NO quiero que pase).
El problema es cómo mantengo la información de un registro que contiene una tabla ajena cuando borro precisamente esa clave ajena. Si la tengo puesta como opcional, podría sencillamente cambiar el DNI de la persona por un valor Null?
En fin, que estoy más perdida que un pulpo en un garaje. De todas maneras, muchas gracias por vuestra ayuda.
Volver arriba
Mensaje    Asunto: Responder citando

Vamos a ver, si quieres dar posibilidad de que cuando borres un persona se te borre un ingreso, es obvio ON DELETE CASCADE, si lo que quieres es que cuando se intente borrar una persona y esta tenga ingresos, no se pueda borrar, entonces no pongas nada que es lo mismo que poner ON DELETE RESTRICT, ahora si lo quieres es poder borrar una persona y que no se pierda el ingreso, probablemente lo que quieras es un ON DELETE SET NULL de forma que en el ingreso concreto, te aparece el campo PERSONA con un valor NULO, el cual podría o no, violar la NULIDAD del campo, eso es otra historia y no es problema dependiendo de lo que quieras hacer, otra opción es ponerlo a un valor por defecto, aunque también podría violar la repetición si es campo clave, bueno no te lio, ahí tienes las alternativas...

Ciao.
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.