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

Model seznamu sousedství vs model vnořených sad pro hierarchická data MySQL?

Model Nested Set Model se dnes v databázích běžně nepoužívá, protože je složitější než model Adiacency List, vzhledem k tomu, že vyžaduje správu dvou „ukazatelů“ namísto jednoho. Ve skutečnosti byl model Nested Set Model zaveden do databází, když bylo složité nebo nemožné provádět rekurzivní dotazy, které procházely hierarchií.

Od roku 1999 standardní SQL zahrnuje tzv. rekurzivní společné tabulkové výrazy nebo rekurzivní CTE, což usnadňuje (a standardizuje!) vytváření dotazů, které procházejí rekurzivní cestou v rámci hierarchie s jakýmikoli počet úrovní.

Všechny hlavní systémy DBMS nyní tuto funkci zahrnují, s výraznou výjimkou:MySQL. Ale v MySQL můžete tento problém překonat použitím uložených procedur. Viz například tento příspěvek na StackOverflow nebo tento příspěvek na dba.stackexchange .

Takže shrnuto, toto jsou moje rady:

  1. Pokud se stále můžete rozhodnout, který DBMS použijete, důkladně zvažte některé alternativy:například pokud chcete zůstat u databáze s otevřeným zdrojovým kódem, použijte PostgreSQL , použijte model seznamu Adiacency a pro své dotazy použijte rekurzivní CTE.
  2. Pokud nemůžete změnit DBMS, přesto byste měli použít model seznamu Adiacency a používat uložené procedury, jak jsou uvedeny v odkazech.

AKTUALIZACE

Tato situace se mění s MySQL 8, která je aktuálně ve vývoji a která bude integrovat rekurzivní CTE , takže od této verze bude model seznamu Adiacency snazší na používání.




  1. Oracle Database Explorer:bezplatné školení a akreditace

  2. Struktura nákupního košíku MySQL

  3. Jak zachytit DB-požadavky? (MySQL)

  4. dpkg:chyba zpracování balíčku mysql-server (problémy se závislostí)?