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

Adjacency List Model vs Nested Set Model per i dati gerarchici MySQL?

Il Nested Set Model oggi non è comunemente usato nei database, poiché è più complesso dell'Adiacency List Model, dato che richiede la gestione di due "puntatori" invece di uno solo. In realtà, il Nested Set Model è stato introdotto nei database quando era complesso o impossibile eseguire query ricorsive che attraversavano una gerarchia.

Dal 1999, l'SQL standard include le cosiddette espressioni di tabella comuni ricorsive, o CTE ricorsive, che rendono più semplice (e standardizzato!) eseguire query che attraversano percorsi ricorsivi all'interno di una gerarchia con qualsiasi numero di livelli.

Tutti i principali sistemi DBMS hanno ora incluso questa funzionalità, con una notevole eccezione:MySQL. Ma in MySQL puoi superare questo problema con l'uso di stored procedure. Vedi, ad esempio, questo post su StackOverflow o questo post su dba.stackexchange .

Quindi, in sintesi, questi sono i miei consigli:

  1. Se puoi ancora decidere quale DBMS utilizzare, prendi in considerazione alcune alternative:ad esempio, se vuoi restare con un database open source, usa PostgreSQL , utilizza il modello di elenco di adiacenza e utilizza CTE ricorsivi per le tue query.
  2. Se non puoi modificare il DBMS, dovresti comunque utilizzare l'Adiacency List Model e utilizzare le procedure memorizzate come quelle citate nei riferimenti.

AGGIORNAMENTO

Questa situazione sta cambiando con MySQL 8, che è attualmente in fase di sviluppo e che integrerà i CTE ricorsivi , in modo che da quella versione il Modello di Lista di Adiacenza sarà più semplice da usare.