Het ontwerp van de geneste sets is absoluut moeilijk wanneer u de boom regelmatig moet bijwerken. Uiteindelijk moet je grote delen van de boom opnieuw nummeren.
Een suggestie om dit te verminderen is om getallen met drijvende komma te gebruiken in plaats van gehele getallen. Als je een nieuw knooppunt in de boomstructuur invoegt, is het relatief eenvoudig om enkele FLOAT-nummers te vinden tussen de geneste setnummers van het bovenliggende knooppunt van het nieuwe knooppunt. Je kunt uiteindelijk de limieten van de precisie van een getal met drijvende komma bereiken, maar aangezien je boom niet erg diep is, zal dat niet lang gebeuren.
Een andere techniek waarover ik heb geschreven, noem ik Sluitingstabel . Deze methode voor het opslaan van hiërarchieën maakt het veel gemakkelijker om knooppunten in een grote boomstructuur in te voegen/bij te werken/te verwijderen zonder dat u veel van uw boomstructuur hoeft bij te werken. En je kunt nog steeds de hele boom of een subboom doorzoeken in een enkele niet-recursieve SQL-query.
Zie voor meer informatie over Sluittabel:
- Wat is de meest efficiënte/elegante manier om een platte tafel in een boom te ontleden?
- Modellen voor hiërarchische gegevens met SQL en PHP
- Subbomen verplaatsen in sluitingstabelhiërarchieën
- SQL-antipatronen:de valkuilen van databaseprogrammering vermijden
Opnieuw uw opmerking:
Aangrenzende lijst is eenvoudig, heeft een minimum aan redundantie en ondersteunt FK-relaties, wat niet het geval is bij geneste sets. Adjacency List ondersteunt het bevragen van een hele boom van willekeurige diepte als u recursieve query's gebruikt . Maar MySQL ondersteunt geen recursieve zoekopdrachten.
Als u alleen directe ouder-kindrelaties (d.w.z. één niveau van diepte) wilt opvragen, of anderszins alleen bomen met een vaste diepte wilt opvragen, dan is de aangrenzende lijst prima.