Ver Mensaje Individual
  #4 (permalink)  
Antiguo 26/06/2012, 03:30
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: insertar en 3 tablas relacionadas y unir una

No. No está bien formulado, porque la relación entre las tres tablas sólo existirá cuando hayas ingresado los datos en "estudiante_grado"...

Vamos a ver si puedo explicarte mejor:
Las tablas relacionales no se pueden llenar si no es programáticamente, porque sus datos provienen de tablas base que aún no están vincularas. Precisamente la tabla relacional ES el vínculo.


Normalmente esto significa que si tienes que dar un alta en dos tablas y luego establecer la relación entre esos registros, forzosamente tendrás que programar tres INSERT, de los cuales el tercero es siempre el de la tabla relacional. Pero ese tercer INSERT jamás provendrá de un SELECT... INSERT... porque la relación de ese SELECT es inexistente y devolverá NULL.
Cuando se desea evitar realizar específicamente los tres INSERT INTO ... VALUES(...), y no se requieren controles de otro tipo respecto a los valores, lo que se suele hacer es implementar el alta en un stored procedure, al cual se pasan todos los datos a dar el alta, de todas las tablas involucradas, y es dentro del P donde se realizan las validaciones de las altas en la tablas base, antes de hacer la de la relacional.
Una de las ventajas de usar SP para esto es que puedes meter toda la ejecución en una transacción, con lo que o se confirman las tres altas al mismo tiempo, o no entra ninguna, con lo cual te estas asegurando la consistencia de los datos y la integridad referencial en una sola llamada.


El tema de los SP es extremadamente poderoso, y libera recursos del sistema, dando la responsabilidad al servidor de MySQL.



Ojo: No son para cualquier uso. No es conveniente hacer tareas que el lenguaje de programación hace mejor. No te olvides que el SQL no es un lenguaje de programación sino de consultas, y está optimizado para realizar operaciones masivas con datos, y no para crear aplicativos o reportes (salvo algunas excepciones). Para eso existen oros medios mejores.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 26/06/2012 a las 06:59