Ver Mensaje Individual
  #3 (permalink)  
Antiguo 05/11/2010, 08:13
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 2 meses
Puntos: 574
Respuesta: Actualizar campo en 2 tablas

Hay distintas formas de hacerlo, pero creo la mejor forma de hacerlo es no hacerlo!!!

Por que, si te fijas en tu estructura de base de datos tienes información repetida, y eso no es nunca recomendable porque si por lo que sea se actualiza una tabla y la otra no la base pierde su coherencia interna. Tu pregunta me hace pensar que ya has intuido este problema, por eso quieres asegurarte que si pasa una cosa pase la otra.

Solución haz solo una de las operaciones, altas y bajas de alquileres

Si hombre, y luego como sabre si un edificio esta alquilado?

Pues con una consulta muy sencilla

Código SQL:
Ver original
  1. SELECT Inm.CodInmueble, IF(Alq.CodInmueble IS NULL,falso,TRUE) AS Alquilado
  2. FROM Inmuebles Inm LEFT JOIN Alquileres Alq
  3. ON Inm.CodInmueble=Alq.CodInmueble

Eso te dará todos (LEFT JOIN) los edificios de la tabla Inmuebles con indicación de si estan o no alquilados. La consulta se puede sofisticar, selecionando con un where los alquileres vigentes o agregando campos de la tabla inmueble que te digan mas cosas que el Codigo, la dirección por ejemplo...

Con lo cual la coherencia interna de la base de datos no se puede romper, ya que la info de si un edificio esta alaquilado solo se guarda en un sitio, la tabla Alquileres.

Se podria romper por la via de eliminar Inmuebles sin tener en cuenta si estan en la tabla Alquileres o alquilando inmuebles que no estan en su tabla, esto se soluciona definiendo una clave foranea (FK) en la tabla alquileres referenciada a Inmuebles lo que te controlara que solo puedas alquilar inmuebles que tengas previamente registrados y si defines ON DELETE CASCADE o ON DELETE RESTRICT hara que si eliminas un edificio de Inmuebles se elimine su posible alquiler (CASCADE) o que te impida eliminar un edificio sin eliminar previamente su alquiler (RESTRICT). Todo esto suponiendo que estas trabajando con mysql y tablas InnoDB.

Quim

Última edición por quimfv; 05/11/2010 a las 08:24