Domanda

Non ho oggetti che rappresentano le cartelle e mi chiedo se essi dovrebbero essere rappresentati nel database.

Da un lato sembra che il modo più semplice sarebbe quella di non rappresentare gli oggetti della cartella e solo memorizzare un valore di percorso per gli oggetti contenuti in una cartella. I problemi che vedo con questo è che non si può persistere una cartella i cui discendenti non contengono tutti gli elementi, che non è troppo grande di un affare. Anche io non ho una chiara idea di come caricare la gerarchia di cartelle da visualizzare (ad esempio in un TreeView) senza caricare tutto in memoria in anticipo, che probabilmente sarebbe un problema di prestazioni.

L'alternativa è quella di avere una tabella di "cartella" con riferimenti alla sua cartella principale. Questo sembra che dovrebbe funzionare, ma sono sicuri di come consentire cartelle con lo stesso nome, purché non condividono un genitore. Nel caso che anche essere qualcosa di DB dovrebbe essere in sé preoccupante con o è quel qualcosa che dovrei semplicemente far rispettare nella logica del business?

È stato utile?

Soluzione

L'idea è qualcosa di simile (auto-riferimento):

CREATE TABLE FileSystemObject ( 
    ID int not null primary key identity,
    Name varchar(100) not null,
    ParentID int null references FileSystemObject(ID),
    constraint uk_Path UNIQUE (Name, ParentID),
    IsFolder bit not null
)

Altri suggerimenti

Date un'occhiata al il disco di ripristino in mezzo a questo . Factoring fuori la gerarchia in una tabella separata permette di supportare molteplici tassonomie.

Per prima chiedetevi che cosa lo scopo è di mantenere la gerarchia nel database e quali funzionalità si guadagna da questo. Poi chiedi considerare il lavoro e la manutenzione che va in a farlo.

Se si sta semplicemente usando per riempire un controllo struttura, ci sono controlli integrati che vanno direttamente contro il sistema della cartella. Vorrei che lavorare meglio per voi? Cosa si guadagna qualcosa al di là che la memorizzazione nel database? Come si prevede di mantenere il database in sincronia con il sistema di cartelle attuale, che può essere modificato al di fuori del DB? A meno che il fornendo un file system virtuale può essere meglio andare solo direttamente contro la cosa reale con percorsi importanti memorizzate nel database.

SQL Server ha un tipo di dati hierarchyid che ha il supporto per le strutture gerarchiche. Funziona solo nella versione completa, ti dispiacerebbe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top