No entiendo lo que buscas con esta parte
Cita: No sé si esta tabla es necesaria para algo.
tabla tipos?
id_tipo|tipo: persona, institución
tabla colaboradores
id_colaborador(PK)|id_tipo(FK relacionado con PK id_tipo de la tabla tipos)
tabla colaboradores_actividades
id_col_actividad|id_colaborador(FK relacionado con PK id_colaborador)
De entrada entre personas y instituciones tienes una relación n:m
personas ---->RelPerInst<----Instituciones
En RelPerInst tendras los dos id de las tablas relacionadas.
Por otro lado tienes las Actividades que para mi seria un atributo de RelPerInst como a su vez podría ser otra relación n:m (puesto que una persona puede colaborar para la misma institución en distintas actividades) seria una relación ternaria.
Actividades 1 ------ n ¬
personas 1 ----> n
RelPerInst n <---- 1
Instituciones
quedando
RelPerInst
idPersona
idInstitucion
idActividad
--------------- PK (idPersona,idInstitucion,idActividad)
fechaAlta
fechaBaja
Con lo que podrías tener actividades relacionadas con n personas y m instituciones.
De ahí se puede obtener
- las personas que colaboran con una institución.
- las actividades de una persona
- las colaboraciones entre instituciones
La pertenecía o no de las personas a las instituciones debería controlarse a parte. Me queda la duda de si es demasiado fuerte la restricción de que se hayan designado personas para poder "fichar" una colaboración entre instituciones...
No se si es lo que buscas....