Ver Mensaje Individual
  #10 (permalink)  
Antiguo 25/07/2013, 06:23
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: lógica en bases de datos

Cita:
es la primera vez que oigo sobre SIGNAL, pero lo busco y no encuentro en el manual de mysql.
Manual de referencia oficial de MySQL a partir de la versión 5.5,x... y te lo dije claramente:
Cita:
(ver SIGNAL en manuales recientes)
¿En dónde estás buscando?

De todos modos el objetivo de esa sentencia es generar o administrar condiciones de error, no resolverte consistencias. La idea es provocarlo para que el trigger falle y la operación se cancele.

Pero el problema central es que te estás ahogando en un dedal de agua, no ya en un vaso.
Las ocsas no son tan complicadas, pero debes olvidarte un poco de la lógica de programación, porque la de datos es diferente (no es una exageración).
Si tienes una tabla de posts, y una tabla donde almacenas el texto del post, en realidad lo que has hecho es crear una tabla por razones funcionales, pero el contenido de esa tabla sigue siendo un atributo del post, y por tanto pertenece a él.
¿Qué quiere decir esto? Simplemente que el texto depende del post y por consecuencia lo primero que se crea es el post. Siempre.
Luego de creada la inserción del post, y recuperado su ID, recién entonces se inserta el texto en su tabla, con el valor del id delpost recuperado.
Ahora bien, ¿qué pasa si el primer insert falla? Simple: No se hace el segundo.
¿Y qué pasa si falla el segundo? Más simple aún: Se debe dar de baja el primer registro en forma directa y sin más trámite...
¿Por qué?
Porque falló toda la operación que se considera atómica: post + texto. O ambos, o ninguno.

Todo eso se hace en un stored procedure de modo que reciba lo parámetros mínimos (usuario, tema, texto, por ejemplo), y devuelva siempre un codigo que represente exito o fracaso, que bien podría ser simplemente el ID del post (positivo si es exitoso, cero o negativo si hubo error).

Obviamente, es fundamental que el id_post sea uno de los atributos de la tabla de textos de posts, y si la relación entre post y texto es 1:1, como parece ser, simplemente ese mismo campo se declara como PK de la tabla de textos (donde se campo no es autoincremental, por supuesto).

¿Se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)