Indlejrede sæt-designet er bestemt svært, når du skal lave hyppige opdateringer til træet. Du ender med at skulle omnummerere store dele af træet.
Et forslag til at afbøde dette er at bruge flydende kommatal i stedet for heltal. Hvis du indsætter en ny node i træet, er det relativt nemt at finde nogle FLOAT-numre mellem de indlejrede sæt-numre for forælderen til den nye node. Du kan i sidste ende komme til grænserne for præcisionen af et flydende kommatal, men da dit træ ikke er særlig dybt, vil det ikke ske i lang tid.
En anden teknik, som jeg har skrevet om, kalder jeg Closure Table . Denne metode til lagring af hierarkier gør det meget nemmere at indsætte/opdatere/slette noder i et stort træ uden at skulle opdatere meget af dit træ. Og du kan stadig forespørge hele træet eller et hvilket som helst undertræ i en enkelt ikke-rekursiv SQL-forespørgsel.
For at læse mere om lukkebord, se:
- Hvad er den mest effektive/elegante måde at parse en flad tabel til et træ?
- Modeller til hierarkiske data med SQL og PHP
- Flytning af undertræer i lukningstabelhierarkier
- SQL Antipatterns:Avoiding the Pitfalls of Database Programming
Om din kommentar:
Adjacency List er enkel, har et minimum af redundans, og den understøtter FK-relationer, hvilket Nested Sets ikke gør. Adjacency List understøtter forespørgsler om et helt træ af vilkårlig dybde, hvis du bruger rekursive forespørgsler . Men MySQL understøtter ikke rekursive forespørgsler.
Hvis du kun har brug for at forespørge på umiddelbare forældre-barn-relationer (dvs. ét dybdeniveau), eller på anden måde kun forespørger efter træer med fast dybde, er Adjacency List fint.