Foros del Web » Programación para mayores de 30 ;) » Programación General »

No borrar registros, actualizar el estado a borrado

Estas en el tema de No borrar registros, actualizar el estado a borrado en el foro de Programación General en Foros del Web. Hola buenas, Tengo que hacer una aplicación y me interesa que en lugar de borrar el contenido de la base de datos con un DELETE ...
  #1 (permalink)  
Antiguo 16/05/2011, 05:50
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 11 años, 10 meses
Puntos: 165
No borrar registros, actualizar el estado a borrado

Hola buenas,

Tengo que hacer una aplicación y me interesa que en lugar de borrar el contenido de la base de datos con un DELETE y cargarme el registro de la base de datos, cambiar el estado para que para la aplicación este borrado.

Y quería saber cual es la mejor manera de implementar esto.. que tipo de columna colocar y demás.

Un saludo!
  #2 (permalink)  
Antiguo 16/05/2011, 05:54
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 10 años, 3 meses
Puntos: 58
Respuesta: No borrar registros, actualizar el estado a borrado

No hay problema. Simplemente colocas otra columna con un valor inicial de 0, y cuando quieras borrarlo lo pones a 1 (o viceversa).
  #3 (permalink)  
Antiguo 16/05/2011, 05:55
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 12 años, 4 meses
Puntos: 845
Respuesta: No borrar registros, actualizar el estado a borrado

Se le suele llamar soft/logical delete y consiste en agregar un campo(flag) a la tabla en cuestión, el campo seria del tipo tinyint con valor por defecto 0, cuando vas a "borrar" simplemente actualizas el campo a 1.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #4 (permalink)  
Antiguo 16/05/2011, 07:35
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 11 años, 10 meses
Puntos: 165
Respuesta: No borrar registros, actualizar el estado a borrado

Cita:
Iniciado por masterpuppet Ver Mensaje
Se le suele llamar soft/logical delete y consiste en agregar un campo(flag) a la tabla en cuestión, el campo seria del tipo tinyint con valor por defecto 0, cuando vas a "borrar" simplemente actualizas el campo a 1.

Saludos.
Entonces... ese campo que se agrega que nombre suele tener?

Siempre pensé que se ponía a 0 un campo borrado.. jeje

muchas gracias a los dos un saludo!
  #5 (permalink)  
Antiguo 16/05/2011, 07:43
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 10 años, 3 meses
Puntos: 58
Respuesta: No borrar registros, actualizar el estado a borrado

Pero que más da el nombre que le pongas. Ponle el que quieras, "borrado", "flag", "atalajacalastaca", da igual.
La cuestión es que a la hora de consultar a la base de datos consultes el campo por su nombre para saber si vale 0 ó 1.
  #6 (permalink)  
Antiguo 16/05/2011, 07:57
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 11 años, 10 meses
Puntos: 165
Respuesta: No borrar registros, actualizar el estado a borrado

Bueno... eso de que más da.. para mi es importante hacer las cosas bien. No me cuesta nada saber cual es la forma habitual de hacerlo, así, si algún día un desarrollador toca la aplicación, sabrá de que se trata, en cambio, si se encuentra con algo como "atalajacalastaca", dudo que lo entienda... creo que deberías replantearte un poco esa manera de pensar ;)

Un saludo!
  #7 (permalink)  
Antiguo 16/05/2011, 08:02
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 11 años
Puntos: 641
Respuesta: No borrar registros, actualizar el estado a borrado

creo que lo que nexus trata de explicar es que el funcionamiento de ese sistema de borrado no depende del nombre que tenga.

aunque tienes razón, siempre es bueno mantener un orden.
  #8 (permalink)  
Antiguo 16/05/2011, 08:54
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 10 años, 3 meses
Puntos: 58
Respuesta: No borrar registros, actualizar el estado a borrado

Hombre, vamos a ver, si es para un ejercicio de una asignatura y lo va a ver el profesor, o es que el administrador de la base de datos es otra persona distinta al programador, pues está claro que es mejor poner nombres más evidentes para entender mejor el funcionamiento.

Pero a lo que yo me refería es a lo que ha dicho memoadian. Da igual el nombre que se le pongan a los campos en una base de datos. Nadie te obliga a ponerle un nombre u otro, que el funcionamiento no va a cambiar.
Es más, una vez lei por ahí que, por seguridad, no conviene poner a los campos de una base de datos nombres muy evidentes por aquello de evitar los ataques de inyección sql, así que con un nombre como "atalajacalastaca" seguro que está más protegida, XD. (Estoy hablando de oidas, no se nada de seguridad)
  #9 (permalink)  
Antiguo 16/05/2011, 09:23
 
Fecha de Ingreso: enero-2008
Mensajes: 201
Antigüedad: 12 años, 4 meses
Puntos: 39
Respuesta: No borrar registros, actualizar el estado a borrado

Agregar un campo que indique que esta borrado es una solución rápida y eficaz, pero plantea 2 problemas (que yo pueda ver):

1. Hay que cambiar todas las consultas para añadir en el where que ese campo indique que el registro no fue borrado.

2. A la hora de comprobar la integridad de las claves foráneas ¿cómo indicas que no compruebe con registros que tienen ese campo marcado como borrado?

Yo la solución que veo mas elegante y que no implica esos problemas es tener una segunda tabla idéntica donde tener los registros que fueron borrados.
  #10 (permalink)  
Antiguo 16/05/2011, 13:24
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 11 años, 10 meses
Puntos: 165
Respuesta: No borrar registros, actualizar el estado a borrado

Es evidente que el funcionamiento es el mismo... eso no hace falta ni comentarlo.. jajaja

Lo de la seguridad.. puede ser pero.. ten en cuenta que se pueden obtener el nombre de los campos, por lo tanto, da igual..

La opción de crear una segunda tabla me parece bien, pero.. los identificadores cuales serían? si son los mismos que los originales... que pasará cuando te traigas todos los resultados? se duplicarán los id?

Un saludo y gracias!
  #11 (permalink)  
Antiguo 16/05/2011, 13:51
 
Fecha de Ingreso: enero-2008
Mensajes: 201
Antigüedad: 12 años, 4 meses
Puntos: 39
Respuesta: No borrar registros, actualizar el estado a borrado

Cuando traigas todos los datos como los campos son iguales simplemente a los que no fueron borrados se añaden como filas los que si fueron borrados. Como puedes saber cuantas filas tiene cada tabla puedes saber en que punto acaban las filas de registros borrados y no borrados. Aunque si fueron borrados no tiene mucho sentido mostrarlos ni utilizarlos, pero como no se que quieres hacer con esos datos supuestamente borrados no se si tiene sentido o no en tu caso.

Pero la solución que yo aplicaría es esa, 2 tablas: una para los no borrados y otra para los borrados.
  #12 (permalink)  
Antiguo 16/05/2011, 14:02
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 11 años, 10 meses
Puntos: 165
Respuesta: No borrar registros, actualizar el estado a borrado

Cita:
Iniciado por _Ruben_ Ver Mensaje
Cuando traigas todos los datos como los campos son iguales simplemente a los que no fueron borrados se añaden como filas los que si fueron borrados. Como puedes saber cuantas filas tiene cada tabla puedes saber en que punto acaban las filas de registros borrados y no borrados. Aunque si fueron borrados no tiene mucho sentido mostrarlos ni utilizarlos, pero como no se que quieres hacer con esos datos supuestamente borrados no se si tiene sentido o no en tu caso.

Pero la solución que yo aplicaría es esa, 2 tablas: una para los no borrados y otra para los borrados.
De acuerdo, muchas gracias y un saludo!

Etiquetas: borrado, borrar, estado, php, registros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:35.