 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Invitado Invitado
|
Publicado: Sab 29 May, 2004 11:09 am Asunto: Problema con eliminaciones y claves ajenas |
|
|
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
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 |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Sab 29 May, 2004 11:23 pm Asunto: |
|
|
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 |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Dom 30 May, 2004 4:22 am Asunto: |
|
|
| de que BD hablas? Hasta donde se, todas permiten actualizaciones, modificaciones y eliminaciones en cascada. |
|
| Volver arriba |
|
 |
Invitado Invitado
|
Publicado: Dom 30 May, 2004 11:12 am Asunto: |
|
|
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 |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Dom 30 May, 2004 1:10 pm Asunto: |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|