Nome pattern per trovare rapidamente i discendenti con SQL (colonna PATH con [TopId] ... [DirectAncestorId]. [OwnId]) NO set nidificati

1

Ho letto molto tempo fa su un pattern / tecnica per interrogare facilmente tutti i "discendenti" di un record (non è necessario utilizzare CONNECT TO, che non è standard e non disponibile con JPA).

Mi sono ricordato che il pattern veniva chiamato "sets annidati", ma ora che sto documentando sono andato a controllarlo e ho scoperto che "set nidificati" è in qualche modo simile, ma non uguale.

Tipicamente, si applica a una singola tabella con una relazione 1-N a se stessa, v.g una tabella di Persona in cui ogni record ha un attributo Madre che è una chiave estranea alla persona.

Pertrovarefacilmentetuttiidiscendentidiundatorecord,latecnicahafunzionatoinquestomodo:

  • Quandoèstatoinseritounrecord,l'attributoPathverràcalcolatoememorizzato.

    • Seilrecordnonha"madre", sarebbe solo l'ID del record seguito da un separatore (ad esempio un punto). Quindi, INSERT INTO PERSON(Id, Name, Mother, Path) VALUES(1, 'Alice' null, '1.') .
    • Se il record ha un record "madre", prefigura il percorso attribuito con il percorso madre. Quindi, PERSON(Id, Name, Mother, Path) VALUES(2, 'Betty', 1, '1.2.'); e PERSON(Id, 'Carol', Mother, Path) VALUES(3, 2, '1.2.3.');

Per cercare, ad esempio, tutti i discendenti di Carol (inclusa se stessa), diventa semplice come SELECT * FROM Person WHERE Path LIKE '1.%' .

Naturalmente, il costo è che Path non è in una forma normale (è un attributo che non dipende solo dal suo id), quindi è necessario prestare particolare attenzione quando si inseriscono, eliminano o aggiornano i record.

Qualcuno conosce il nome di questa tecnica? Come ho detto sopra, ho pensato che fosse un set annidato, ma Wikipedia dice che ho torto.

    
posta SJuan76 02.06.2015 - 10:12
fonte

1 risposta

1

L'ho appena trovato, si chiama percorsi materializzati .

Alcuni link che fanno riferimento / spiegano loro:

link

link

    
risposta data 02.06.2015 - 16:50
fonte

Leggi altre domande sui tag