Potresti avere tutto in una tabella, categoria. Quindi avere una colonna per parentID. Se parentID =0, è una categoria principale, se è un altro ID, allora è una sottocategoria? Questa struttura supporterebbe le sotto-sottocategorie... non sono sicuro che ti sia utile.
Campi di esempio:
Table: category
categoryID
parentID
name
Dati di esempio:
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