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

Načítání dat s hierarchickou strukturou v MySQL

MySQL postrádá rekurzivní dotazy, které jsou součástí standardního SQL. Tuto funkci podporuje mnoho dalších značek databází, včetně PostgreSQL (viz http://www.postgresql.org/docs/8.4/static/queries-with.html ).

Existuje několik technik pro manipulaci s hierarchickými daty v MySQL.

  • Nejjednodušší by bylo přidat sloupec s hierarchií, do které daná fotografie patří. Poté můžete vyhledat fotografie, které patří do stejné hierarchie, načíst je všechny zpět do aplikace a zjistit, které tam potřebujete. To je trochu plýtvání z hlediska šířky pásma, vyžaduje to, abyste napsali více kódu aplikace, a není dobré, když vaše stromy mají mnoho uzlů.

Existuje také několik chytrých technik pro ukládání hierarchických dat, abyste je mohli dotazovat:

  • Výčet cesty ukládá seznam předků s každým uzlem. Například fotografie 5 ve vašem příkladu bude obsahovat „0-2-4-5“. Předky můžete hledat vyhledáním uzlů, jejichž cesta zřetězená s "%" odpovídá cestě 5 s LIKE predikát.

  • Vnořené sady je složitá, ale chytrá technika popularizovaná Joe Celkem ve svých článcích a své knize "Stromy a hierarchie v SQL pro Smarties." Existuje také mnoho online blogů a článků o tom. Je snadné dotazovat se na stromy, ale obtížné je dotazovat se bezprostředních dětí nebo rodičů a obtížné vkládat nebo mazat uzly.

  • Uzavírací tabulka zahrnuje ukládání každého vztahu předek/potomek do samostatné tabulky. Pokud přidáte délku cesty, je snadné dotazovat se na stromy, snadno vkládat a mazat a snadno se dotazovat přímých rodičů nebo dětí sloupec.

Více informací o porovnání těchto metod můžete vidět v mé prezentaci Practical Object -Orientované modely v SQL nebo moje připravovaná kniha SQL Antipatterns:Avoiding the Ptfalls of Database Programming .



  1. Jak vypočítat klouzavý průměr v MySQL

  2. Kontrola, zda existuje uživatel mysql

  3. Nejlepší způsob, jak uložit IP do databáze?

  4. Formátujte číslo na 2 desetinná místa