выглядит хорошо, хотя category_link_table может быть проблематичным. Если ваши бизнес-требования не позволяют связать с категорией ИЛИ подкатегорию, не храните идентификаторы основной категории и подкатегории в таблице ссылок. Хранить только идентификатор подкатегории.
Имея и то, и другое, вы потенциально можете получить несоответствия categoryID / subcategoryIDs, в которых есть что-то из категории 'A' и подкатегория 'p' в категории 'B'.