Ver Mensaje Individual
  #6 (permalink)  
Antiguo 05/10/2014, 08:42
Avatar de dashtrash
dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 1 mes
Puntos: 270
Respuesta: bloque de registro desde php

Cita:
Iniciado por asardon Ver Mensaje
Hola:
El gestor de base de datos es MySQL. MySQL tiene recursos para gestionar estas situaciones, en concreto las transacciones. Pero hay un problema desde php: que no se puede mantener una conexión única a la base de datos en todo el proceso descrito, desde el paso 1 al paso 4
Eso es un problema de PHP, o de concepto?
Eso no es un problema.Que tú le enseñes un formulario a un usuario, no significa que bloquees un registro, por si acaso ese usuario lo edita.Eso es así en cualquier lenguaje del mundo.

Aparte..
COLUMNAS : id_blocker , blocked_on
Hecho.
Cita:
En aplicaciones de escritorio este tema es mas simple, porque la conexion a la base de datos es persistente y hay herramientas como SELECT FOR UPDATE que te permiten establecer bloqueos de escritura a nivel de fila, pero la web es asincronica, un usuario puede abrir para editar un registro a las 10 de la mañana y guardar la confirmacion a las 5 de la tarde
Cita:
En cambio en aplicaciones de escritorio el bloqueo sigue vivo mientras el programa se encuentre en la pantalla de edicion y todos los demas miembros de la red saben que hay alguien editando ese registro.
Por qué se presupone que por web, una persona abre para editar un registro a las 10 de la mañana, y guarda a las 5....Y eso es imposible que pase en una aplicación de escritorio?Es que el comportamiento de la persona cambia si la aplicación es de escritorio o web?
Y si alguien tiene una modificación urgente que hacer?Es más feliz, y piensa que el sistema está mejor diseñado, porque al menos "sabe" que alguien tiene el registro bloqueado desde hace 7 horas?O le estás pasando al usuario un problema que tienes tú, como programador, al bloquear registros innecesariamente? Nota: los timeouts no son una solución.Son una tirita a poner en un diseño de aplicación que es malo.Y, por supuesto, igualmente podrías poner un timeout en la aplicación web.

.Y, para colmo, cuando llegan las cinco, le da a "cancelar" en el formulario, y ha mantenido el registro bloqueado durante 7 horas, para nada.

Bloquear un registro antes de que exista una acción concreta a realizar sobre él, es algo que está intrinsecamente mal diseñado.

Presunción incorrecta:
Cita:
las dos alteraciones deberían ser compatibles
Por? Si eso fuera así, no existirían problemas de concurrencia.
Una persona categoriza un objeto en un formulario :
MATERIAL : Oro. PRECIO 1

Diez minutos despues, se da cuenta de que se ha equivocado de material, y modifica:
MATERIAL : Plomo PRECIO 1

Pero alguien tambien se ha dado cuenta, y piensa que el problema es el precio, y modifica, a la vez:
MATERIAL : Oro. PRECIO 100

Como son dos modificaciones "compatibles", en la BD queda:
MATERIAL: Plomo PRECIO 100.

Si una modificación es compatible o no con otra, es algo que depende completamente de la naturaleza del dato.De quien es responsabilidad saber que el oro vale 100 o 1? De la aplicación?
Puede la aplicación inferir quien se ha equivocado de material, y quien se ha equivocado de precio?

Todo esto no es PHP.Son conceptos básicos de programación.

Última edición por dashtrash; 05/10/2014 a las 08:57