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

úložiště hierarchie mysql s velkými stromy

Design Nested Sets je rozhodně obtížný, když potřebujete často aktualizovat strom. Nakonec budete muset přečíslovat velké části stromu.

Jedním z návrhů pro zmírnění tohoto je použití čísel s plovoucí desetinnou čárkou namísto celých čísel. Pokud do stromu vložíte nový uzel, je relativně snadné najít nějaká FLOAT čísla mezi vnořená čísla sady rodiče nového uzlu. Možná se nakonec dostanete na hranice přesnosti čísla s plovoucí desetinnou čárkou, ale protože váš strom není příliš hluboký, nestane se to ještě dlouho.

Další technika, o které jsem psal, nazývám Closure Table . Tento způsob ukládání hierarchií usnadňuje vkládání/aktualizaci/mazání uzlů ve velkém stromu, aniž by bylo nutné aktualizovat velké množství stromu. A stále můžete dotazovat celý strom nebo jakýkoli podstrom v jediném nerekurzivním SQL dotazu.

Chcete-li si přečíst více o tabulce uzavření, viz:

K vašemu komentáři:

Adjacency List je jednoduchý, má minimální redundanci a podporuje FK vztahy, což Nested Sets ne. Adjacency List podporuje dotazování na celý strom libovolné hloubky, pokud používáte rekurzivní dotazy . MySQL však nepodporuje rekurzivní dotazy.

Pokud potřebujete dotazovat pouze bezprostřední vztahy rodič-dítě (tj. jedna úroveň hloubky), nebo jinak dotazovat pouze stromy pevné hloubky, pak je seznam sousedství v pořádku.



  1. Jak používat kaskádu mazání na úložišti MySQL MyISAM?

  2. Chyba:Vypršel časový limit nečinnosti handshake v modulu MYSQL Node.js

  3. Systém správy velkých databází:Návrh a architekt

  4. Jak přehledněji zobrazit data tabulky v oracle sqlplus