PrepareStatement em Java (Dúvida Simples)

Olá a todos, estou criando um sistema e fazendo sua persistência em meu banco relacional MySQL, porem ao realizar um CRUD estou tendo problemas com o DELETE por ser um banco relacional.

Ao executar o DELETE em minha tabela funcionário que possui duas chaves estrangeira(Cargo e Setor), apresenta o seguinte erro:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (bancoprojeto.trilha, CONSTRAINT fk_Trilha_Funcionario1 FOREIGN KEY (Funcionario_idFuncionario, Funcionario_Cargo_idCargo) REFERENCES funcionario (idFuncionario, Cargo_idCargo))

Como notaram eu entendo o porque do erro ocorrer, porem eu não sei qual seria a melhor opção para corrigir esse problema, pois eu teria que apagar o meu cargo/setor toda vez que for deletar um funcionário por conta de seu relacionamento.

Eu mesmo me questiono : " E os outros funcionários que estão vinculado ao mesmo cargo/setor que esse meu funcionário está, teria que remover todos só por conta do relacionamento? ".

Eu conseguiria apenas apagar esse registro de funcionário na tabela funcionário? digo… apenas deletar a referencia de cargo/setor na tabela funcionário e em um de seus registros, na tabela cargo e setor permaneceria a mesma coisa.

Desculpe o texto enorme, agradeço se leu até aqui para me dar uma orientação.

Como você estruturou estas tabelas?

a pergunta é: É necessária a chave de cargo e setor contando que 1 funcionário pode ter mais de 1 dos dois. se faça essa pergunta.
Posso dar até mais uma, só pra dar uma esquentada…hehe --> É necessária a exclusão desse funcionário, ou apenas um ativo = ‘N’ já resolve meu caso? Não manterei um histórico desse funcionário?
…ó saiu duas sem querer…rsrs

Obrigado pela atenção Jonatha, eu estruturei assim:

Caraca Blayd !!! Muito bem observado, eu poderia adicionar um campo entre as tabelas, como por exemplo sr_deleted, onde se eles estiver marcado como ‘N’ eu apenas ignoro essa informação ao “deletar” via sistema, sendo assim mantando seu histórico e exibindo somente as informações que eu preciso, incrível !

Cargo e setor não dependem de funcionário, está certinho!

A dependência de funcionário é com trilha, para excluir um funcionário ele não pode estar relacionado com nenhuma trilha!

Um ponto importante é que você não precisa carregar o cargo do funcionário para a trilha, pois a tabela de funcionário já tem essa informação, a partir do funcionário já conseguimos descobrir qual o cargo que ele possuí, logo, cargo não deveria estar na trilha.