Uma tarefa um tanto quanto chata de ser realizada é fazer um delete em uma tabela em um registro que possui filhos(ou dependência, como preferir) e que na criação da Foreign Key não é definido a opção ON DELETE CASCADE. Então você irá tentar apagar e irá aparecer essa mensagem de erro:

ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails...

Isso significa que para que seja possível apagar o registro desejado, antes será necessário apagar os filhos desse registro.

Nesse momento que bate aquela tristeza enorme, pois você não tem o MER e terá que olhar várias até achar os filhos.

Para ajudar nesse processo eu desenvolvi essa procedure que lista as tabelas que possuem filhos(apenas as tabelas que possuem filhos, pode ser que exista um FK mas a tabela não possui nenhum filho, nesse caso não irá apresentar como resultado) de um registro.

DELIMITER $
CREATE PROCEDURE sp_getDataDependency(_P_DB_ VARCHAR(64), _P_TABLE_ VARCHAR(64), _P_VALUE_ VARCHAR(200))
BEGIN
 -- This procedure returns the dependencies of a table
 -- The dependencias are checked by FOREIGN KEYS
 -- Contacts: Diego Hellas/diegohellas@gmail.com
 -- 2015-06-23
 -- _P_DB_: Database name
 -- _P_TABLE_: Table name
 -- _P_VALUE_: Value to be checked
 DECLARE v_constratint VARCHAR(64);
 DECLARE v_table VARCHAR(64);
 DECLARE v_FK_name VARCHAR(64);
 DECLARE v_FK_table_name VARCHAR(64);
 DECLARE v_finished INTEGER DEFAULT 0;
 DECLARE cursor_childrens CURSOR FOR SELECT CONSTRAINT_NAME, TABLE_NAME FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = _P_DB_ AND REFERENCED_TABLE_NAME = _P_TABLE_;
 DECLARE cursor_references CURSOR FOR SELECT COLUMN_NAME, TABLE_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE CONSTRAINT_SCHEMA = _P_DB_ AND TABLE_NAME = @v_table AND CONSTRAINT_NAME = @v_constratint;
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;
 SELECT DATABASE() INTO _P_DB_;
 SET @v_query = CONCAT('DROP TABLE IF EXISTS getDataDependency'); 
 PREPARE dropTable from @v_query; 
 EXECUTE dropTable; 
 DEALLOCATE PREPARE dropTable;
 SET @v_query = CONCAT('CREATE TEMPORARY TABLE getDataDependency(TABLE_NAME VARCHAR(64), COLUMN_NAME VARCHAR(64))'); 
 PREPARE createTable from @v_query; 
 EXECUTE createTable; 
 DEALLOCATE PREPARE createTable;
 OPEN cursor_childrens;
 cursor_childrens: LOOP
 FETCH cursor_childrens INTO v_constratint, v_table;
 IF v_finished = 1 THEN 
 LEAVE cursor_childrens;
 END IF;
 SET @v_constratint = v_constratint;
 SET @v_table = v_table;
 -- --------------------------------
 OPEN cursor_references;
 cursor_references: LOOP
 FETCH cursor_references INTO v_FK_name, v_FK_table_name;
 SET @qtyResults = 0;
 SET @v_query = CONCAT('SELECT COUNT(*) FROM ', _P_DB_ , '.' , v_FK_table_name , ' WHERE ', v_FK_name, ' = ', _P_VALUE_ , ' INTO @qtyResults'); 
 PREPARE selectTable from @v_query; 
 EXECUTE selectTable; 
 DEALLOCATE PREPARE selectTable; 
 IF @qtyResults > 0 THEN 
 SET @v_query = CONCAT('INSERT INTO getDataDependency(TABLE_NAME, COLUMN_NAME) VALUES("', v_FK_table_name ,'", "', v_FK_name ,'")'); 
 PREPARE insertTable from @v_query; 
 EXECUTE insertTable; 
 DEALLOCATE PREPARE insertTable; 
 END IF;
 LEAVE cursor_references;
 END LOOP cursor_references;
 CLOSE cursor_references;
 -- ---------------------------------
 END LOOP cursor_childrens;
 CLOSE cursor_childrens;
 SELECT * FROM getDataDependency;
END$
DELIMITER ;

Como usar:

call sp_getDataDependency(‘Database name’, ‘Table name’, ‘PK_value’);

Isso irá me ajudar muito, espero que ajude vocês também.

Abraço