• Miércoles 20 de Noviembre de 2024, 16:39

Autor Tema:  Eliminacion Logica De Tuplas  (Leído 5126 veces)

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Eliminacion Logica De Tuplas
« en: Martes 11 de Diciembre de 2007, 03:37 »
0
Una pregunta queridos amigos.

He notado que muchos de ustedes es los programas que hacen utilizan la eliminacion logica y no asi la fisico. (es decir lo manejan con estados).

Pues yo tambien estoy utilizando esa misma forma.

Ahora bien, suponiendo que la relacion es entre las tablas: Persona y Pais.

En el formulario donde estan los paises, tengo las opciones de: Adicionar, Modificar, Eliminar (logico), lo cual segun YO, no deberia dejarme eliminar(logico) si es que ese pais ya esta siendo usado por una persona.

Ahora, como podria hacer eso. No se me ocurre nada
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Eliminacion Logica De Tuplas
« Respuesta #1 en: Martes 11 de Diciembre de 2007, 03:59 »
0
integridad referencial.

es decir cualquier tabal que use ese pais debe tener una llave foranea.

Siempre en una bd si tratas de eliminar una registro y hay datos referenciados (foreign keys ) en otras tablas asocidas nunca te lo dejara borrar.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Eliminacion Logica De Tuplas
« Respuesta #2 en: Martes 11 de Diciembre de 2007, 12:25 »
0
Cita de: "JuanK"
integridad referencial.

es decir cualquier tabal que use ese pais debe tener una llave foranea.

Siempre en una bd si tratas de eliminar una registro y hay datos referenciados (foreign keys ) en otras tablas asocidas nunca te lo dejara borrar.
Si si.

Por ejemplo, en la tabla persona tengo una columna IDPAIS que es llave foranea a la tabla pais columna IDPAIS.

Tambien en la tabla pais tengo una columna que se llama IDESTADO, la cual es 1 cuando esta activa y 0 cuando la borro (es decir cuando le doy eliminar un pais lo unico que hago es modificar el campo IDESTADO EN 0) para que asi no lo pueda usar mas, pero el problema es. Que pasa con aquellos que ya lo han usado ??.

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

ElNapster

  • Moderador
  • ******
  • Mensajes: 727
    • Ver Perfil
Re: Eliminacion Logica De Tuplas
« Respuesta #3 en: Martes 11 de Diciembre de 2007, 17:04 »
0
Puedes hacer una eliminacion forzada, aunque tengas una integridad referencial puedes utilizar una eliminacion forzada al registro, aunque no muy aconsejable , pero igual se puede hacer  :ph34r:

 :comp:
"Somos lo que imaginamos ser"
-- --------------------------------------------------------------
-ElNapster
-Designer / Developer Software
-GuaTemALa



lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Eliminacion Logica De Tuplas
« Respuesta #4 en: Martes 11 de Diciembre de 2007, 18:45 »
0
Citar
Puedes hacer una eliminacion forzada,
Pero lo que pasa es que yo no quiero eliminar las tuplas fisicamente, solo quiero eliminarlas logicamente.

Por ejemplo, si la persona PEPE tiene el pais COLOMBIA asignado, y cuando yo vaya al formulario pais, y trate de eliminar el pais colombia (osea cambiar solamente su estado  en 0), no me permita por el simple echo de que ya hay una persona usando esa nacionalidad.


Gracias.

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

ElNapster

  • Moderador
  • ******
  • Mensajes: 727
    • Ver Perfil
Re: Eliminacion Logica De Tuplas
« Respuesta #5 en: Martes 11 de Diciembre de 2007, 19:59 »
0
Podrias realizar un Trigger , que te vea si hay registros asociados a ese foreing key , de ser asi que te cambie de primero los estados de los registros y luego el del foreing key   :ph34r:

 :comp:
"Somos lo que imaginamos ser"
-- --------------------------------------------------------------
-ElNapster
-Designer / Developer Software
-GuaTemALa



lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Eliminacion Logica De Tuplas
« Respuesta #6 en: Miércoles 12 de Diciembre de 2007, 01:16 »
0
Cita de: "ElNapster"
Podrias realizar un Trigger , que te vea si hay registros asociados a ese foreing key , de ser asi que te cambie de primero los estados de los registros y luego el del foreing key   :ph34r:

 :comp:
umm, pues creo que puede ser una wena idea, pero se me complicaria en el caso de que:

Cuando tablaA, tablaB, tablaC, tablaD, tablaE,....tablaZ.

Y todas ellas tengan un foreign key a la anterior.

Es decir lo de la eliminacion  (logica) en cascada, creo que no me conviene.


Gracias.

Nota. Otra cosa, hablando de trigger, nunca pude hacer uno en SQL Server 2005, Before Update.

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

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Eliminacion Logica De Tuplas
« Respuesta #7 en: Jueves 13 de Diciembre de 2007, 01:44 »
0
hola,
nada que hacer lo que necesitas es un triguer.. no se si se pueda en sql server pero deberas trabajar con sql dinamico consuiltando el diccionario de datos.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Eliminacion Logica De Tuplas
« Respuesta #8 en: Jueves 13 de Diciembre de 2007, 03:30 »
0
Citar
sql dinamico consuiltando el diccionario de datos.
Es significa armar las consultas dinamicamentes ???, pero.... Como ?


Gracias.

Nota.- En el anterior post mencione que nunca pude hacer un trigger BEFORE UPDATED, y por fin pude saber por que.

En Sql server no existe el tiempo (AFTER, BEFORE). Pero se lo puede sustituir con las tablas INSERTED, DELETED.

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: Eliminacion Logica De Tuplas
« Respuesta #9 en: Jueves 13 de Diciembre de 2007, 08:10 »
0
Pero lo que harías no es ejecutar un UPDATE ?

ejemplo:

tabla: paises
idPais | Nombre    | Eliminado
---------------------------------------
1        | Colombia   |    N
2        | Guatemala |    N
3        | Bolivia       |    N
4        | Mexico       |   N


tabla: usuarios

idUsuario | Nombre | idPais
------------------------------------
1        | Lencho     |    3
2        | elNapster  |    2
3        | Juank       |    1
4        | Ftanori      |    4

----------------------------------------------------------------------------------------------
no soy muy diestro en SQL Server pero en MySQL seria algo mas o menos asi
utilizando Exists (Not Exists) tambien es posible utilizar IN ....


<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->@pais=4

[color=blue;font-weight]UPDATE[/color] paises SET eliminado='S'  WHERE not exists ([color=blue;font-weight]select[/color] 1 from usuarios u where u.idPais=p.idPais ) and idPais=@pais ;
<!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->


habría que ver como se hace en SQL Server y crear el SP o el metodo desde el lenguaje utilizado pudiendo retornar  " rows affected " no se como se haga en SQL Server :P

No se si eso te sirva, pero pude ser una idea

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
===========================================================================================================================

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Eliminacion Logica De Tuplas
« Respuesta #10 en: Jueves 13 de Diciembre de 2007, 23:39 »
0
Muchas gracias por la idea.

Pero..., siendo de esta forma (en el mejor de los casos, solo revisar una relacion)
<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->[color=blue;font-weight]UPDATE[/color] paises SET eliminado='S' WHERE not exists ([color=blue;font-weight]select[/color] 1 from usuarios u where u.idPais=p.idPais ) and idPais=@pais ;
<!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->

Y si ademas de Persona, la tabla Pais, se relaciona con Departamento, Continente, Planeta (POR DECIR !!)

Tendria que hacer..
<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->[color=blue;font-weight]UPDATE[/color] paises
SET eliminado='S'
WHERE idPais=@pais and not exists ([color=blue;font-weight]select[/color] 1 from usuarios u where u.idPais=p.idPais ) and not exists ([color=blue;font-weight]select[/color] 1 from Departamento d where d.idPais=p.idPais ) and not exists ([color=blue;font-weight]select[/color] 1 from Continente c where c.idPais=p.idPais ) and not exists ([color=blue;font-weight]select[/color] 1 from Planeta pl where pl.idPais=p.idPais )
<!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->

Por lo tanto cada vez que aumente una llave foranea a esta tabla pais, tendria que aumentar UN AND MAS el trigger anterior.
Y yo pense si no existe alguna funcion, que me puedad ayudar a obtener las llaves que tiene una determinada tabla y asi poder hacerlo automatico.


Gracias.


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: Eliminacion Logica De Tuplas
« Respuesta #11 en: Sábado 15 de Diciembre de 2007, 10:52 »
0
Ok, no habia entendido que se extenderian las relaciones :P

pues como dice JuanK pudieras revisar las tablas del sistema con un query apropiada sacar las relaciones....


Otra opcion seria utilizar transacciones  :rolleyes: eliminando el registro y comprobando si se elimina tomando las filas afectadas o el error (claro utilizando integridad referencial como ya se comento) para saber es posible eliminar dicho registro

despues de hacer esa comprobacion ejecutar el Rollback, y hacer el UPDATE para la eliminacion LOGICA


No se que tan fuera de mis casillas este con esa idea :P pero es una opcion



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
===========================================================================================================================

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Eliminacion Logica De Tuplas
« Respuesta #12 en: Sábado 15 de Diciembre de 2007, 15:31 »
0
Cita de: "F_Tanori"
No se que tan fuera de mis casillas este con esa idea :P pero es una opcion
 
podria ser buena salvo en el caso que se eliminaron bastantes registros,por demas decir que hay un esfuerzo transaccional amplio o pbueno puee que no mucho :S



Saludos.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Eliminacion Logica De Tuplas
« Respuesta #13 en: Sábado 15 de Diciembre de 2007, 23:32 »
0
Ajaaaa.

Me parece muy wena la idea.

Tratare de aplicarla.

Muchas gracias.


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