Ciao, ti scrivo perchè uso da tempo strutture ad albero con MySQL. Alcune risposte:
A - come fare se alcuni livelli dell'albero (magari l'ultimo) hanno dei dati in più da salvare? No problem: basta creare una tabella di estensione con chiave+valori. Il problema è logico: una gerarchia ad albero a infiniti livelli dovrebbe contenere oggetti tutti dello stesso tipo. Se i tipi sono diversi non possono essere infiniti, allora non ti serve un albero, ma una cascata di tabelle in gerarchia. Cioè: articolo figlio di articolo figlio di articolo .... è logicamente diverso articolo figlio di categoria figlio di macrocategoria. Nel primo caso usi una tabella ricorsiva a chiave figlio/padre, nel secondo tre tabelle (potranno essere 4, 5 ma non infinite e comunque in numero certo).
B - Non esiste SQL puro ricorsivo. Cioè non puoi avere un albero nel risultato di una query. Il motivo è semplice: le colonne devono essere in numero predefinito. Quindi puoi vedere 2,3 livelli ma non n. Esistono solo due modi per fare ricorsione: o una stored procedure (scripting per sql) oppure da codice (ad esempio php). Nel secondo caso semplicemente cerchi i figli con padre uguale ai figli del giro precedente etc... Per rappresentare in html: usi nella funzione ricorsiva una variabile globale che conta i giri ed aggiunge una indentazione ad ogni nuova riga. Esistono diversi modi per rendere alberelli in html.
C - Prestazioni. Anche se hai migliaia di righe è veloce, purchè tu abbia buone chiavi (usa degli interi) e il codice ricorsivo sia breve. Il motivo è semplice: il numero di iterazioni-query è pari ai nodi dell'albero, che sono in numero finito. Di solito la parte più lenta non è MySQL ma la rappresentazione html.