Io non so se sono riuscito ad inquadrare bene il tuo problema, comunque era già stata postata una soluzione a riguardo di database con categorie, sottocategorie etc. ed una soluzione molto flessibile che era stata proposta era stata quella di fare un db composto di un'unica tabella, il chè risultava molto flessibile ed estensibile. Era gestito con una specie di ricorsività; cerco di spiegartelo in poche parole, sperando di non fare confusione.
Dunque tu hai un unica tabella, con (mettiamo il caso più semplice e banale) 3 soli campi.nell'ultimo campo metterai 0 (o un valore che vuoi tu) se la categoria non ha una categoria padre (e quindi è padre di per sé).codice:id_categoria | nome_categoria | id_categoria_padre
In questo caso la tua tabella è altamente flessibile nel senso che puoi arrivare ad esempio anche al 100° livello con una sola tabella; chiaramene (almeno a mio parere) richiede più cura nella progettazione e nella stesura. E va benissimo nel caso in cui tu non sappia a priori quanti livelli deve avere il tuo db.
Per livelli intendo una struttura del genere:
Questo con una struttura ricorsiva richiede una sola tabella, altrimenti te ne dovrai fare 2 o 3 (2 se il db tratta solo di Sport 3 se tratta di più Argomenti).codice:Sport | |----Individuali | | | |----Scherma | | | |----Boxe | |----Di Squadra | |----Calcio
Nel secondo caso, lo puoi fare benissimo quando sai a priori il numero di livelli che avrai, dovrai implementare una tabella per ogni livello ed in ogni tabella avrai ad esempio l'id del livello padre impostato come chiave esterna. Questo è relativamente più semplice (parlo per mia esperienza, che naturalmente non è la stessa di molti altri) e richiede meno cura, in quanto ogni volta che hai bisogno di un nuovo livello basta aggiungere una nuova tabella; richiede molta meno testa nel ragionamento delle query per risalire ad esempio al nodo padre (bastano un paio di JOIN), ma per contro (come già detto) è poco flessibile ed estensibile ed occupa maggior spazio inteso come memoria.
A mio modesto parere non esiste una soluzione migliore in ogni campo, in quanto ognuno potrebbe elaborare una soluzione a lui congeniale, una soluzione che lui trova semplice ed immediata.
Detto questo spero di essere riuscito a chiarirti qualcosa e non il contrario.
e buon lavoro!