Come implementare l'organizzazione di oggetti in una struttura gerarchica in un database relazionale

1

Sto sviluppando un'applicazione in cui gli utenti possono creare determinati oggetti business (per semplicità chiamiamoli solo 'oggetti') che sono memorizzati in una tabella in un database relazionale (i nomi delle colonne sono banali: id(int, primary key) , name(varchar) , type(varchar) , e pochi altri che non sono rilevanti).

Le operazioni disponibili all'utente tramite la GUI sono tipiche: creazione, lettura, aggiornamento, elenco (con filtri per nome, tipo, ecc.)

Ora, ho bisogno di implementare un paio di nuove operazioni: la possibilità di creare una struttura gerarchica di "cartelle" e consentire all'utente di creare, nominare / rinominare e spostarli attraverso questa gerarchia. Inoltre, la possibilità di "inserire" gli oggetti degli utenti in una qualsiasi delle "cartelle" e filtrare l'elenco di tutti gli oggetti tramite il "percorso" completo di questo oggetto (in base al nome di una qualsiasi delle sue cartelle padre).

Sono sicuro che tali attività siano state eseguite da molte persone in passato, e sono curioso di vedere quale tipo di struttura DB sarebbe ottimale per realizzare questo (specialmente per filtrare gli oggetti con il loro "percorso completo" ).

    
posta Andre Borges 31.03.2017 - 10:31
fonte

1 risposta

1

Indipendentemente dalla tecnologia utilizzata per la persistenza, è necessario definire chiaramente le funzionalità della gerarchia in termini di dominio per il cliente o l'utente.

I file system fanno questo e secondo me, generalmente con limitazioni indesiderabili. Per esempio, limita drasticamente i caratteri consentiti in un elemento di cartella ir path. Per un altro, di solito funzionano male quando l'utente vuole usare cartelle come categorie, vale a dire, vuole mettere un elemento in due cartelle.

In breve, dovresti prima lavorare con ciò che vuoi fornire al client a livello di API, puoi mappare quelle capacità al db.

    
risposta data 01.04.2017 - 01:55
fonte

Leggi altre domande sui tag