Posts e categorias são provavelmente muitos-para-muitos, não um-para-muitos.
Uma tabela de relacionamento muitos-para-muitos é melhor feita algo como
CREATE TABLE a_b (
a_id ... NOT NULL,
b_id ... NOT NULL,
PRIMARY KEY (a_id, b_id),
INDEX(b_id, a_id) -- include this if you need to go both directions
) ENGINE = InnoDB;
Com isso, você obtém automaticamente pesquisas "agrupadas" em ambas as direções e evita o ID artificial desnecessário para a tabela.
(A propósito, N.B., um PK implícito tem 6 bytes, não 8. Há um longo post de Jeremy Cole sobre o assunto.)
Um relacionamento um-para-muitos não precisa dessa tabela extra. Em vez disso, tenha um id dentro da outra tabela. Por exemplo, uma tabela Cidade terá o id do País nela.