sql >> Database >  >> RDS >> Mysql

Wat zijn de bekende manieren om een ​​boomstructuur op te slaan in een relationele DB?

Zoals altijd:er is geen beste oplossing. Elke oplossing maakt verschillende dingen gemakkelijker of moeilijker. De juiste oplossing voor u hangt af van welke bewerking u het meest zult uitvoeren.

Naïeve benadering met ouder-ID:

Voordelen:

  • Eenvoudig te implementeren

  • Eenvoudig een grote subboom naar een andere ouder verplaatsen

  • Invoegen is goedkoop

  • Benodigde velden direct toegankelijk in SQL

Nadelen:

  • Het ophalen van een hele boom is recursief en daarom duur

  • Het vinden van alle ouders is ook duur (SQL kent geen recursie... )

Gewijzigde Preorder Tree Traversal (opslaan van een start- en eindpunt):

Voordelen:

  • Een hele boom terughalen is gemakkelijk en goedkoop

  • Alle ouders vinden is goedkoop

  • Benodigde velden direct toegankelijk in SQL

  • Bonus:je bewaart ook de volgorde van childnodes binnen zijn parentnode

Nadelen:

  • Invoegen / bijwerken kan erg duur zijn, omdat u misschien veel knooppunten moet bijwerken

Een pad opslaan in elk knooppunt:

Voordelen:

  • Alle ouders vinden is goedkoop

  • Een hele boom ophalen is goedkoop

  • Invoegen is goedkoop

Nadelen:

  • Een hele boom verplaatsen is duur

  • Afhankelijk van de manier waarop u het pad opslaat, kunt u er niet rechtstreeks in SQL mee werken, dus u moet het altijd ophalen en ontleden als u het wilt wijzigen.

Sluitingstabel

Voordelen:

  • Eenvoudig te implementeren

  • Alle ouders vinden is goedkoop

  • Invoegen is goedkoop

  • Hele bomen ophalen is goedkoop

Nadelen:

  • Heeft een extra tafel nodig

  • Neemt veel ruimte in beslag in vergelijking met andere benaderingen

  • Een substructuur verplaatsen is duur

Ik heb liever een van de laatste twee, afhankelijk van hoe vaak de gegevens veranderen.

Zie ook:http://media.pragprog.com/titles/bksqla/trees. pdf



  1. SIGN() Voorbeelden in SQL Server

  2. Hoe rijen in SQL Server-tabel in te voegen door de GUI van tabelrijen te bewerken - SQL Server / TSQL-zelfstudie, deel 101

  3. hoe SQL-query's te schrijven?

  4. De waarde van een variabele afdrukken in SQL Developer