Der er flere alternativer til at gøre hierarkisk information lettere at arbejde med i SQL:
-
Almindelige tabeludtryk (ifølge SQL-2003-standarden) understøtter rekursive SQL-forespørgsler mod den overordnede-id-type af data, du bruger. Indtil videre understøtter MySQL ikke denne funktion. PostgreSQL 8.4, Microsoft SQL Server og IBM DB2 er eksempler på RDBMS-mærker, der understøtter CTE-syntaks. Oracle har også en proprietær udvidelse til SQL-syntaks, der understøtter rekursive forespørgsler.
-
Indlejrede sæt (venstre/højre-løsningen, som @phantombrain nævner) er en løsning beskrevet i Joe Celkos bog "Trees and Hierarchies in SQL for Smarties" og også i adskillige artikler og blogindlæg på internettet.
-
Stioptælling (aka Materialized Path) gemmer en streng i hver række i hierarkiet for at notere stien til forfædre til den række. Kombiner dette med
LIKE
forespørgsler for at sammenligne stistrengen med dens forfædres stier og efterkommeres stier. -
Lukningstabel (aka Transitive Closure Relation) bruger en anden tabel til at gemme alle forfader-efterkommer-relationer, ikke kun den umiddelbare forælder som i det design, du bruger. Mange typer forespørgsler bliver nemmere, når du har gemt alle stierne.
-
Hybridløsninger findes også. Gem f.eks. det umiddelbare forældre-id, som du gør, men også roden af træet. Nu kan du få alle andre rækker i det samme hierarki, hente dem ind i applikationskoden og sortere træet fra med konventionelle datastrukturer.