sql >> Database teknologi >  >> RDS >> Mysql

Hvad er de kendte måder at gemme en træstruktur i en relationel DB?

Som altid:Der er ingen bedste løsning. Hver løsning gør forskellige ting nemmere eller sværere. Den rigtige løsning for dig afhænger af, hvilken operation du vil udføre mest.

Naiv tilgang med forældre-id:

Fordele:

  • Nem at implementere

  • Nemt at flytte et stort undertræ til en anden forælder

  • Indsatsen er billig

  • Nødvendige felter, der er direkte tilgængelige i SQL

Ulemper:

  • At hente et helt træ er rekursivt og derfor dyrt

  • Det er også dyrt at finde alle forældre (SQL kender ikke rekursioner...)

Ændret Preorder Tree Traversal (gemmer et start- og slutpunkt):

Fordele:

  • At hente et helt træ er nemt og billigt

  • Det er billigt at finde alle forældre

  • Nødvendige felter, der er direkte tilgængelige i SQL

  • Bonus:du gemmer også rækkefølgen af ​​childnodes inden for dens parentnode

Ulemper:

  • Indsættelse/opdatering kan være meget dyrt, da du måske bliver nødt til at opdatere en masse noder

Gemmer en sti i hver node:

Fordele:

  • Det er billigt at finde alle forældre

  • At hente et helt træ er billigt

  • Indsættelse er billigt

Ulemper:

  • Det er dyrt at flytte et helt træ

  • Afhængigt af måden du gemmer stien på, vil du ikke være i stand til at arbejde med den direkte i SQL, så du bliver altid nødt til at hente og analysere den, hvis du vil ændre den.

Tabel for lukning

Fordele:

  • Nem at implementere

  • Det er billigt at finde alle forældre

  • Indsættelse er billigt

  • Det er billigt at hente hele træer

Ulemper:

  • Har brug for et ekstra bord

  • Optager meget plads sammenlignet med andre tilgange

  • Det er dyrt at flytte et undertræ

Jeg foretrækker en af ​​de to sidste, afhængigt af hvor ofte dataene ændres.

Se også:http://media.pragprog.com/titles/bksqla/trees. pdf



  1. Sådan logger du forespørgsler i PostgreSQL

  2. Kan MySQL erstatte flere tegn?

  3. Beregn en løbende total i SQL Server

  4. Fejlfinding af SQL Server CPU-ydelsesproblemer