Публикациите и категориите вероятно са много към много, а не едно към много.
Таблица за връзки много към много е най-добре да се направи нещо като
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;
С това автоматично получавате „клъстерни“ търсения в двете посоки и избягвате ненужния изкуствен идентификатор за таблицата.
(Между другото, N.B., неявният PK е 6 байта, а не 8. Има дълга публикация от Джеръми Коул по темата.)
Връзката един към много не се нуждае от тази допълнителна таблица. Вместо това имайте един идентификатор в другата таблица. Например, таблица за град ще съдържа идентификатора за държавата.