Autor Tema: Eliminar datos de tablas relacionadas con mysql y java  (Leído 6374 veces)

gatoher

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 86
    • Ver Perfil
Eliminar datos de tablas relacionadas con mysql y java
« en: 18 de Agosto 2014, 21:09 »
Hola a todos estoy haciendo en Java con MySql un ejercicio para almacenar reservas de un hotel. El problema que tengo es que las siguientes tablas relacionadas.

Persona => Cliente => Habitacion => Consumiciones

Al intentar eliminar un cliente que no ha reservado una habitación  no hay problema, pero al eliminar una reserva de habitacion, "un cliente puede hacer varias reservas,osea puede reservar varias habitaciones y cada habitación  puede tener varias  consumiciones", bueno pues esto no me deja hacerlo por las claves ajenas.

Entonces he pensado sacar todas las habitaciones que un cliente tiene, supongamos 3,"habitación 5,10,20" almacenar el número de cada habitación en un array y luego con un for ir eliminado todas las consumiciones,"la tabla consumiciones tiene el id de la habitación que hace el pedido".

¿Esto estaría bien hecho?. La verdad que este problema lo tengo bastante.

 

Agradeceria cualquier comentario. Saludos
« Última modificación: 31 de Agosto 2014, 10:49 por Alex Rodríguez »

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:Eliminar datos de tablas relacionadas
« Respuesta #1 en: 18 de Agosto 2014, 23:54 »
Hola, lo primero que debes tener en cuenta es que cada tabla debe tener su id único y luego puede relacionar con otras tablas a través de un id ajeno.

Por ejemplo Consumiciones tendría:

IdConsumicion IdHabitacion PrecioConsumisicion TipoConsumicion etc.


Para saber a qué habitación corresponde una consumición tienes el IdHabitación.

Ahora supongamos que quieres eliminar un cliente.

En la tabla Habitación puedes tener algo como:

IdHabitacion IdCliente NumeroHabitacion CamasHabitación etc.


Si eliminas el cliente con IdCliente 782, antes de eliminar esa línea de la tabla Cliente tendrás que recorrer las tablas donde aparezca el IdCliente 782 y decidir qué haces con esa información. Si la quieres eliminar de la tabla Habitación, podrías poner en la fila afectada como IdCliente -1, siendo -1 una señal de que la habitación no tiene cliente asociado.

Las consumiciones tienes que pensar si necesitas la información "histórica" o no, si no la necesitas procederías a un borrado tal y como has señalado, pero lo primero será tener claro cuál es la lógica de operación que quieres aplicar y si es necesario, proceder a borrados tal y como indicas.

Saludos!

gatoher

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 86
    • Ver Perfil
Re:Eliminar datos de tablas relacionadas
« Respuesta #2 en: 19 de Agosto 2014, 16:58 »
Hola Mastermind, revisando ayer me di cuenta que al meter la base de datos en el MySql no había puesto las opciones de Integridad Referencial. Vamos que ante delete, update no había puesto poner a null o cascade.
Voy adjuntar una imagen de la base, "¿como se sube al post una imagen?, cuando pincho en el icono me aparecen las etiquetas IMG, pero no se como hacerlo."

Bueno para solucionarlo lo que hice fue poner ON DELETE CASCADE en la tabla idcliente de manera que al borrar un cliente se elimina su reserva pero permanece el consumo, este no se borra.

No llevo mucho tiempo con esto y no se si es una solución óptima.





Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:Eliminar datos de tablas relacionadas
« Respuesta #3 en: 19 de Agosto 2014, 17:10 »
Para insertar una imagen tiene que estar en un servidor (no sirve en tu propio computador) y conocer la url. Por ejemplo si la imagen es http: //w ww.jhcnewmedia.org/gestion/wp-content/uploads/2010/05/202417519_59dcc2d5151.jpg

Pulsas en el icono de imagen y pegas la ruta entre las dos etiquetas img y /img y te queda así (luego le das a centrar):


Si solo la tienes en tu computador tienes que hacer como has hecho, adjuntarla como archivo.

La solución on delete no es mala ni buena por sí misma, primero tienes que pensar cuál es tu objetivo y si con esa solución lo cumples puedes darla por buena. Eso implica un borrado automático, si eso es lo que quieres es buena solución, pero si no quieres el borrado automático tendrías que buscar otras alternativas. Saluds,

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".