Você pode ter tudo em uma tabela, categoria. Em seguida, tenha uma coluna para parentID. Se parentID =0, é uma categoria mestre, se for outro ID, então é uma subcategoria? Esta estrutura suportaria sub-subcategorias... não tenho certeza se isso é útil para você.
Campos de exemplo:
Table: category
categoryID
parentID
name
Dados de exemplo:
categoryID : 1
parentID : 0
name : hot
categoryID : 2
parentID : 0
name: cold
categoryID : 3
parentID : 2
name : a soup that's cold
categoryID : 4
parentID: 1
name: a soup that's hot