• Viernes 8 de Noviembre de 2024, 08:36

Autor Tema:  Integridad Referencial  (Leído 3000 veces)

El Loco Power

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Integridad Referencial
« en: Sábado 14 de Julio de 2007, 00:37 »
0
Una PRegunta mis queridos programadores, analistas, aficionados y amigos todos... tengo un dilema y es la sgte: ;)
 Si yo tengo una tabla maestra, en la cual contiene datos que alimentara a una cabecera(transaccional), de tal manera la tabla maestra se relaciona con la cabecera. Entonces supongamos que en la tabla cabecera tengo mucha informacion que tiene como atributo una llave de la tabla maestra.
Ahora la pregunta es, deseo eliminar un dato que pertenece a la tabla maestra y dicho dato se relaciona con muchos registros en la cabecera, cual seria la solución o criterio para quitar ese registro(de la tabla maestra).
Gracias espero su pronta respuesta. :lightsabre:

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Integridad Referencial
« Respuesta #1 en: Sábado 14 de Julio de 2007, 05:09 »
0
normalmente a esas relaciones les llaman Maestro-Detalle, tu definicion me confundio algo (Maestro-Cabecera) parecen lo mismo.

Si lo que realmente querej es eliminar, entonces tienes que hacerlo en orden inverso de lo que insertaste.


BYTE.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

A_LEX

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Integridad Referencial
« Respuesta #2 en: Sábado 14 de Julio de 2007, 18:26 »
0
Hola,

Borrado en cascada no te funcionaria?

Hasta Pronto.

El Loco Power

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Integridad Referencial
« Respuesta #3 en: Lunes 16 de Julio de 2007, 16:45 »
0
Bueno, para dar un ejemplo rapido...un cliente realiza varias transacciones o compras dentro de una bodega y estas se registran en la bd.Luego de un tiempo el administrador decide eliminar al cliente(teniendo en cuenta que el cliente tiene registrado muchas compras) pero a la vez no desea perder ninguna de sus compras hechas puesto que lo necesita como historial. Ahora la pregunta es.. Como hacer para que el cliente no figure mas en la tabla maestra pero sin perder sus transacciones hechas en su historial de compras. Ahora Normalmente lo que se haria en primer caso es lo sgte:

Solución(1):
-Actualizar con null el codigo del cliente en la tabla de compras y luego eliminar el cliente de la tabla maestra
Desventaja(1):
-Que al momento de realizar un reporte de las compras con respecto al pasado, no figurara mas el dato del cliente, por lo tanto no se sabra quien realizo la compra.

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Integridad Referencial
« Respuesta #4 en: Martes 17 de Julio de 2007, 00:41 »
0
maneja un campo estado en la tabla cliente, el cual tenga 1 cuando este habilitado y 0 cuando lo elimines.


BYTE.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Integridad Referencial
« Respuesta #5 en: Martes 17 de Julio de 2007, 12:34 »
0
La solucion de lencho es utilizada comunmente, la eliminacion logica, si no la utilizas asi, otra manera seria crear una tabla historial donde se almacene la informacion completa del cliente y los pedidos como warehouse seria solo informacion historica y no operacional

Depende de como lo permita el proyecto

Porque si los tienes relacionados por clave de cliente y el clienete 4 es quien realizo los movimientos y lo borras como sabras quien es el cliente 4? en un momento dado.... por eso el campo stautus es muy comun :P ademas que sirve tambien para 'recuperar' informacion si se elimino lo que no era, aunque  casi no pasa eso....:whistling:


Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

Rro_237

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Re: Integridad Referencial
« Respuesta #6 en: Jueves 19 de Julio de 2007, 05:42 »
0
Eliminacion en cascada por supuesto la mejor y mas clara manera de hacerlo, y se comienza a eliminar desde la ultima tabla en que se inserto datos (aunque obviamente depende del relacionamiento)

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Integridad Referencial
« Respuesta #7 en: Jueves 19 de Julio de 2007, 15:52 »
0
Cita de: "Rro_237"
Eliminacion en cascada por supuesto la mejor y mas clara manera de hacerlo, y se comienza a eliminar desde la ultima tabla en que se inserto datos (aunque obviamente depende del relacionamiento)

Cita de: "El Loco Power"
....el administrador decide eliminar al cliente(teniendo en cuenta que el cliente tiene registrado muchas compras) pero a la vez no desea perder ninguna de sus compras hechas puesto que lo necesita como historial. Ahora la pregunta es.. Como hacer para que el cliente no figure mas en la tabla maestra pero sin perder sus transacciones hechas en su historial de compras...


 :rolleyes:  :whistling:
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Integridad Referencial
« Respuesta #8 en: Jueves 20 de Septiembre de 2007, 20:22 »
0
Lomás lógico es tener otra tabla de clientes eliminados, así antes de eliminar un cliente, pasas todos los datos de sus compras a la tabla de compras_de_clientes_eliminados luego eliminas los datos de las tablas vigentes y finalmente el cliente. no hagas relación entre esta tabla y los id de clientes, esta tabla solo será para consultas de histroiales.

Mantener datos que no se van a usar o se usarán poco en tablas que se usan con frecuencia ralentiza el trabajo de la Bd, así que no seas ceporro y no mantengas datos que vas a consultar 2 veces al año en una tabla que manejas a diario.

De todos modos por la descripción del problema que realizas, tengo la sensación de que tienes un cacao de Bd de 3 pares de coj*****, te recomendaría  una lectura sobre 'Normalización' de las bases de datos... busca en google y aplícate al cuento.
«Ma non troppo»
----> ModoVacaciones = False<----