A MySQL mancano le query ricorsive, che fanno parte dell'SQL standard. Molte altre marche di database supportano questa funzione, incluso PostgreSQL (vedi http://www.postgresql.org/docs/8.4/static/queries-with.html ).
Esistono diverse tecniche per gestire i dati gerarchici in MySQL.
- La cosa più semplice sarebbe aggiungere una colonna per annotare la gerarchia a cui appartiene una determinata foto. Quindi puoi cercare le foto che appartengono alla stessa gerarchia, recuperarle tutte nella tua applicazione e capire quelle che ti servono lì. Questo è leggermente dispendioso in termini di larghezza di banda, richiede la scrittura di più codice dell'applicazione e non va bene se i tuoi alberi hanno molti nodi.
Esistono anche alcune tecniche intelligenti per archiviare i dati gerarchici in modo da poterli interrogare:
-
Enumerazione del percorso memorizza l'elenco degli antenati con ogni nodo. Ad esempio, la foto 5 nel tuo esempio memorizzerebbe "0-2-4-5". Puoi cercare gli antenati cercando i nodi il cui percorso concatenato con "%" corrisponde al percorso di 5 con un
LIKE
predicato. -
Set nidificati è una tecnica complessa ma intelligente resa popolare da Joe Celko nei suoi articoli e nel suo libro "Trees and Hierarchical in SQL for Smarties". Ci sono numerosi blog online e articoli anche su di esso. È facile interrogare alberi, ma è difficile interrogare figli o genitori immediati e difficile inserire o eliminare nodi.
-
Tabella di chiusura implica la memorizzazione di ogni relazione antenato/discendente in una tabella separata. È facile interrogare alberi, facile da inserire ed eliminare e facile interrogare genitori o figli immediati se aggiungi un percorso colonna.
Puoi vedere ulteriori informazioni confrontando questi metodi nella mia presentazione Practical Object -Modelli orientati in SQL o il mio prossimo libro SQL Antipatterns:evitare le insidie della programmazione di database .