sql >> Databáze >  >> RDS >> Mysql

Jaké jsou známé způsoby uložení stromové struktury v relační databázi?

Jako vždy:neexistuje žádné nejlepší řešení. Každé řešení usnadňuje nebo ztěžuje různé věci. Správné řešení pro vás závisí na tom, kterou operaci budete nejčastěji provádět.

Naivní přístup s ID rodiče:

Výhody:

  • Snadná implementace

  • Snadné přesunutí velkého podstromu k jinému rodiči

  • Vložka je levná

  • Potřebná pole přímo přístupná v SQL

Nevýhody:

  • Načtení celého stromu je rekurzivní, a proto drahé

  • Najít všechny rodiče je také drahé (SQL nezná rekurze...)

Upravené procházení stromu předobjednávky (uložení počátečního a koncového bodu):

Výhody:

  • Získání celého stromu je snadné a levné

  • Najít všechny rodiče je levné

  • Potřebná pole přímo přístupná v SQL

  • Bonus:ukládáte také pořadí podřízených uzlů v jeho nadřazeném uzlu

Nevýhody:

  • Vložení/aktualizace může být velmi nákladná, protože možná budete muset aktualizovat mnoho uzlů

Uložení cesty v každém uzlu:

Výhody:

  • Najít všechny rodiče je levné

  • Získání celého stromu je levné

  • Vkládání je levné

Nevýhody:

  • Přesun celého stromu je drahý

  • V závislosti na způsobu uložení cesty s ní nebudete moci pracovat přímo v SQL, takže ji budete muset vždy načíst a analyzovat, pokud ji budete chtít změnit.

Uzavírací tabulka

Výhody:

  • Snadná implementace

  • Najít všechny rodiče je levné

  • Vkládání je levné

  • Získávání celých stromů je levné

Nevýhody:

  • Vyžaduje další tabulku

  • Ve srovnání s jinými přístupy zabírá hodně místa

  • Přesunutí podstromu je drahé

Dávám přednost jednomu z posledních dvou, podle toho, jak často se data mění.

Viz také:http://media.pragprog.com/titles/bksqla/trees. pdf



  1. Bezpečnostní úvahy pro nasazení MariaDB v prostředí hybridního cloudu

  2. Změna databázového řazení, Ctype v Postgresql

  3. ORA-00942:Lze vybrat ze schema.table, ale ne z tabulky?

  4. Návrh datového modelu pro systém rezervace hotelových pokojů