Non c'è motivo di avere più di una tabella per le "categorie", sia che si tratti di una categoria di primo livello o di una sottocategoria. Sono tutte solo "categorie".
Quindi, avere una singola tabella chiamata "categories", con un parent_id
campo:
// categories table
id
name
user_id
parent_id
Quando vuoi estrarre tutte le categorie di primo livello, esegui la tua query sulle categories
tabella con una condizione che parent_id
è nullo.
Quindi, quando vuoi estrarre le sottocategorie, esegui la query sulle categories
tabella con una condizione che parent_id = 123
(o altro).
Questo non solo mantiene tutto molto più pulito, ma consente anche l'espansione nel caso in cui desideri continuare ad aggiungere categorie di sotto-sotto-sottosottotitoli... ecc.
Un'altra opzione è usare TreeBehavior di CakePHP .
Personalmente uso piuttosto il modo in cui ho suggerito sopra, ma potrebbe essere solo perché non ho avuto il tempo di capire davvero abbastanza questo comportamento.