Me he ausentado... mucho trabajo y poco tiempo.
Yo tampoco le veo mucha concordancia a incluir id_hilo y id_res juntos... por una parte porque en algun punto tendras que hacer una relacion o consulta a la misma tabla como el ejemplo que te expuso Napk y si analizamos el ejemplo expuesto por Napk, aca en esa simple consulta el motor tendra la optimizacion suficiente para buscar datos cuando se encuentre con esto:
select * from hilo where idhilo = 'algo'
y cuando se encuentre con esto otro:
select * from hilo where idhilo_res = 'algo'
Porque son consultas haciendo referencia a una pk constante pero... cuando le incluyes el UNION ahi el motor para dicho predicado no filtra nada... hara una busquedad de todos los registros que poseas... lo cual te podrias evitar si ambas tablas estuviesen individual.
Que despejes datos a la hora de estructurar no implica que sea redundante algo, redundante es que despues te afecte indirecta o directamente la construccion de algo. Pero mientras mas despejes aveces mas te puede convenir. Aunque visualmente parece que posee detalles demas el diagrama de Napk el meramente ha despejado tablas para evitarse problemas futuros de relacion, sobre optimizaciones de consultas es otro temita que se trata luego que tengas disenada las estructuras de tus tablas y mientras mas despejes mejor porque asi puedes decidir asignarles el motor conveniente a cada tabla sin necesidad de afectar a otra...