Mysql
 sql >> Database >  >> RDS >> Mysql

archiviazione della gerarchia mysql con alberi di grandi dimensioni

Il design dei set nidificati è decisamente difficile quando è necessario apportare frequenti aggiornamenti all'albero. Finisci per dover rinumerare grandi parti dell'albero.

Un suggerimento per mitigare questo è usare numeri a virgola mobile invece di numeri interi. Se inserisci un nuovo nodo nell'albero, è relativamente facile trovare alcuni numeri FLOAT tra i numeri del set nidificato del genitore del nuovo nodo. Alla fine potresti arrivare ai limiti della precisione di un numero in virgola mobile, ma poiché il tuo albero non è molto profondo, ciò non accadrà per molto tempo.

Un'altra tecnica di cui ho scritto la chiamo Tabella di chiusura . Questo metodo di archiviazione delle gerarchie rende molto più semplice inserire/aggiornare/eliminare nodi in un albero di grandi dimensioni senza dover aggiornare molto del tuo albero. E puoi ancora interrogare l'intero albero o qualsiasi sottoalbero in una singola query SQL non ricorsiva.

Per ulteriori informazioni sulla tabella di chiusura, vedere:

Re il tuo commento:

Adjacency List è semplice, ha un minimo di ridondanza e supporta le relazioni FK, cosa che i Nested Sets non fanno. L'elenco di adiacenza supporta l'esecuzione di query su un intero albero di profondità arbitraria se si utilizzano query ricorsive . Ma MySQL non supporta le query ricorsive.

Se hai bisogno di interrogare solo le relazioni genitore-figlio immediate (cioè un livello di profondità), o altrimenti interrogare solo alberi di profondità fissa, allora l'elenco di adiacenza va bene.