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

Actualizar campo en 2 tablas

Estas en el tema de Actualizar campo en 2 tablas en el foro de Bases de Datos General en Foros del Web. Hola! Me estoy volviendo loca intentando hacer una cosa que seguro que lo teneis controladisimo. Tengo 2 tablas Alquileres: CodInmueble, Alquilado Inmuebles: CodInmueble, Alquilado Yo ...
  #1 (permalink)  
Antiguo 05/11/2010, 07:33
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1
Antigüedad: 13 años, 6 meses
Puntos: 0
Actualizar campo en 2 tablas

Hola!

Me estoy volviendo loca intentando hacer una cosa que seguro que lo teneis controladisimo.

Tengo 2 tablas

Alquileres: CodInmueble, Alquilado
Inmuebles: CodInmueble, Alquilado


Yo quisiera que al poner que un inmueble esta alquilado (lo hago mediante un formulario) directamente me actualizara que en la tabla inmuebles esta alquilado. Ademas cuadno lo eliminara de la tabla alquileres me pusiera que en inmuebles esta libre.

Como puedo hacerlo??

Gracias por vuestra ayuda.
  #2 (permalink)  
Antiguo 05/11/2010, 08:09
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Actualizar campo en 2 tablas

merche98...

con triggers lo puedes hacer.
Un trigger es un disparador de sentencias ante un evento (sea insert,update o delete)

Tu caso lo veo basico así que creo que leyendo esto podrás conseguirlo sin problemas.

Trata de hacerlos y si tienes dudas, regresa al foro.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 05/11/2010, 08:13
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
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

Etiquetas: tablas, campos
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 19:04.