New question

Question:

 
  0  
 
Date: 15-08-2017 22:34:26 (In Spanish)

Clave foránea (foreing key), ¿en que dirección va la restricción?[Resolved]

Hola compañer@s,
desde hace mucho me ronda una pregunta con las claves foráneas, y es en qué sentido va la restricción, me explico...

Yo tengo 2 tablas, la principal y la tabla secundaria, lo que quiero es que cuando se borre algo de la tabla principal, se borre todo lo que esté asociado en la secundaria, y al reves no, o sea que si se borra algo en la secundaria no haga nada, y la clave foránea la creo en la vista de la secundaria, no se si está bien, dejo un ejemplo en foto....



Al crear la foreing key como está en la imagen que adjunto, ¿cómo funcionará, lo estoy haciendo bien?

Muchas gracias
Tags: Database - DER - MySQL - MySQL Developing - phpMyAdmin - Question - SQL Trigger Votes: 0 - Answers: 6 - Views: 14 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 21-08-2017 11:02:56 Sí, es correcto.

    Al poner la cláusula ON DELETE UPDATE si borras datos de la tabla independiente todos los datos de la tabla dependiente se borran para mantener la integridad referencial
      Votes: 1 - Link answer
     
  •  
      0  
     
    Date: 21-08-2017 21:24:42 Muchas graciaspor tu respuesta Ernesto.

    Entiendo entonces que la haga donde la haga, el sistema ya identifica que tabla es la principal y cual es la dependiente no?
      Votes: 0 - Link answer
     
  • Date: 23-08-2017 20:58:25 Buenas
    1: Lo que desea es borrar de la tabla 1 = prufe;
    pero en la tabla 2 = prufe_control, se mantengan los datos.

    2: De la tabla dos puede borrar lo que desee pero no se refleja en la tabla 1.

    La forma que lo puedes lograr es con un disparador denominado trigger.
    el cual es un control de auditoria, que controla quien hace cambios, borra o
    incluye datos en una tabla,

    A continuación de adjunto un ejemplo fucional, en caso de que borren algún
    dato de la primera tabla= prufe.

    Atte.


    ---------------------------------------tablas
    prufe
    id int(11)
    fecha date
    monto varchar(45)
    -----------------------------------
    prufe_control
    id INT(11)
    fecha DATE
    monto VARCHAR(45)
    fechacambio DATE
    accion VARCHAR(45)
    -------------------------------------------
    ----crear el trigger----------------------


    DROP TRIGGER IF EXISTS `salidas`.`prufe_BEFORE_UPDATE`;

    DELIMITER $$
    USE `salidas`$$
    CREATE DEFINER=`root`@`localhost` TRIGGER `salidas`.`prufe_BEFORE_UPDATE`
    BEFORE UPDATE ON `prufe`
    FOR EACH ROW
    BEGIN
    INSERT into prufedos_control
    SET
    id= old.id,
    fecha=old.fecha,
    monto= old.monto,
    fechacambio = now(),
    accion = 'update';
    END$$
    DELIMITER ;
      Votes: 1 - Link answer
     
  •  
      0  
     
    Date: 23-08-2017 21:17:54 Muchas gracias Bonilla,

    esto sería algo muy similar a la Foreing Key no?
      Votes: 0 - Link answer
     
  • Date: 24-08-2017 13:07:05 --Lo que deseaba aconsejar es el peligro de que terceras personas alteren o borren datos sensibles.

    --La opinión del Sr. Ernesto Peimbert es la correcta.

    atte.
      Votes: 0 - Link answer
     
  •  
      0  
     
    Date: 24-08-2017 21:10:41 Muchas gracias a todos.   Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In