ayuda porfa con relaciones mysql

Publicado en 'Programación' por gian123, 20 Nov 2011.





  1. gian123

    gian123 Miembro nuevo

    Registro:
    10 Jul 2011
    Mensajes:
    39
    Likes:
    0




    ola amigos que tal les queria hacer ua pregunta lo que pasa es que no entiendo miuy bien el concepto de relaciones de tablas en mysqlme dejaron un trabajo en la cual el eskema era asi:


    categoria:

    idcategoria
    categoria



    cds :
    idcd
    idcategoria(fk)
    titulo

    temas:
    idtema
    idcd(fk)
    tema
    interprete
    duracion



    lo que me han dejado es hacer una aplicacion en java lo que pasa esque cuando hago la relacion luego desde java que quiero eliminar un registro que esta en relacion no me deja me sale una excepcion que me dice que esta relacionado.. :D
     
    Última edición: 20 Nov 2011


  2. initiald

    initiald Miembro frecuente

    Registro:
    12 Jun 2010
    Mensajes:
    142
    Likes:
    19
    Hola claro para manejar ese tipo de errores, tienes que real-izarlo mediante transacciones en un procedimiento almacenado.

    Creas un procedimiento almacenado que primero busque en las tablas dependientes y a la ves las elimine para al final terminar con la tabla principal que querías eliminar.

    Actualmente MySQL tambien soporta borrado de subconsultas te puede ayudar.

    Código:
    DELETE FROM tabla_relacionada WHERE columna_relacionada IN (registros_seleccionados mediante select).
    También puedes trabajar por un campo estado, en donde si el estado es 0 no es visible la fila y su estado es 1 es visible todo depende si los valores de la tabla no pueden ser eliminados y solo desactivados.

    --------------------------------------------------------------------------------------------

    Revizando la documentacion de MySQL, tambien implementaron la eliminacion en cascada y solo tienes que agregar estas lineas a la tabla dependiente.

    Código:
    ALTER TABLE privilegios ADD FOREIGN KEY(id_cliente)
    REFERENCES cliente(id_cliente) ON DELETE CASCADE;
     
    Última edición: 21 Nov 2011
  3. gian123

    gian123 Miembro nuevo

    Registro:
    10 Jul 2011
    Mensajes:
    39
    Likes:
    0


    gracias por tu respuesta pero por ejemplo en el sgt codigo:

    public void eliminar(int codigo) throws Exception {
    Connection cn = new ConectaDB().getConexion();
    PreparedStatement ps = cn.prepareStatement("delete from cds where idcd=?");
    ps.setInt(1, codigo);

    ps.execute();
    cn.close();


    tendria que suplantarlo por este:

    Código:
    DELETE FROM tabla_relacionada WHERE columna_relacionada IN (registros_seleccionados mediante select).
    disculpa pero esode las transaccione con procedimientos alamcenados te refieresal commit rollback?...los procedimientos alamacenados se hacen en el mismo mysql browser o se hacen desde java?...un favor me podrias dar ejemplo de esto..solo cambio el codigo de arriba o tengo que canbiar el cosigo y hacer el procedimiento almacenado?..gracias:yeah:
     
  4. initiald

    initiald Miembro frecuente

    Registro:
    12 Jun 2010
    Mensajes:
    142
    Likes:
    19
    Hola la forma mas fácil de implementar lo que tu quieres es mediante el borrado en cascada, te pongo el ejemplo completo que te ayudar implementarlo. Si no lo entiendes aun así o no te funciona por alguna razón, me escribes para encontrar el error o buscarle la solución mediante transacciones por procedimientos almacenados o código java que también soporta transacciones.

    Ejemplo de como utilizar el DELETE CASCADE:

    http://www.colordeu.es/BLOG/tutorial-mysql-relaciones-entre-tablas-y-su-integridad-referencial
     
    Última edición: 21 Nov 2011