Interessante…
Posso estar enganado, mas percebi que você não é brasileiro (efectuar, estou a resolver…) acertei?
Não sei no seu país, mas competências para nós não significam somente Profissões/Cargos, mas coisas como organizado, trabalha rápido, disciplinado, etc o que nos confunde um pouco (ao menos para mim) o nome da tabela…
Agora em se tratando do relacionamento, creio que o principal seria entre Funcionario e Competencia, não vejo a necessidade de replicar competencia em manutenção e tipomaquina…
Agora para diferenciar na tabela tipomaquina quem opera de quem arruma/conserta, poderia criar mais um id por exemplo…
TipoMaquina
id_TipoMaquina
nomeMaquina
id_operador (id_Funcionario)
id_mecanico (id_Funcionatio)
Ambos id’s apontando para Funcionario (sim isso é possível), esse é um caminho mais curto…
Outro caminho mais detalhado, seria ao invés de ter o id_mecanico na tabela TipoMaquina, incluir na tabela manutenção junto com o id_tipomaquina
Manutencao
id_Manutencao
id_TipoMaquina
id_mecanico (id_Funcionario)
data_manutencao date
hora_manutencao time
Tomei a liberdade de incluir os campos data/hora da manutenção, assim fica mais facil saber quem mexeu e quando mexeu e qual maquina foi mexida
Assim você deixa as competencias (no BR profissões) vinculadas apenas a tabela Funcionario, mas essa é minha visão…
E já pensando em expandir o sistema, é muito comum em fábricas/indústrias a troca de turno, assim há um funcionário diferente que trabalha naquela máquina em turnos diferentes, como resolver isso se a máquina está “amarrada” a somente um funcionário/operador?
Será que vale a pena pensar mais um pouco e criar uma tabela turnos, vinculando o id_TipoMaquina ao id_operador (id_Funcionario no caso) e o turno dele (data/hora de entrada e saída)?