Posty i kategorie to prawdopodobnie wiele do wielu, a nie jeden do wielu.
Tablicę relacji wiele-do-wielu najlepiej wykonać w stylu
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;
Dzięki temu automatycznie otrzymujesz „zgrupowane” wyszukiwania w obu kierunkach i unikasz niepotrzebnego sztucznego identyfikatora tabeli.
(Nawiasem mówiąc, niejawny PK to 6 bajtów, a nie 8. Jest długi post Jeremy'ego Cole'a na ten temat.)
Relacja jeden-do-wielu nie wymaga tej dodatkowej tabeli. Zamiast tego miej jeden identyfikator w drugim stole. Na przykład tabela Miasto będzie zawierała identyfikator kraju.