Question

J'ai des objets représentant des dossiers et je me demande si elles devraient être représentés dans la base de données.

D'une part, il semble que la meilleure façon serait de ne pas représenter des objets de dossier et de stocker seulement une valeur de chemin d'accès pour les objets contenus dans un dossier. Les problèmes que je vois avec ceci est que vous ne pouvez pas conserver un dossier dont les descendants ne contiennent pas d'éléments, ce qui est pas trop grande d'une affaire. Aussi je n'ai pas une idée claire de la façon de charger la hiérarchie des dossiers pour afficher (par exemple dans un TreeView) sans charger tout en mémoire dès le départ, ce qui serait probablement un problème de performance.

L'alternative est d'avoir une table « Dossier » avec des références à son dossier parent. Cela semble que cela devrait fonctionner, mais je ne suis pas sûr comment autoriser des dossiers avec le même nom que tant qu'ils ne partagent pas un parent. Si tel était même quelque chose DB devrait être se préoccuper ou est-ce quelque chose que je devrais appliquer dans la logique de l'entreprise?

Était-ce utile?

La solution

L'idée est quelque chose comme ceci (auto-référencement):

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
)

Autres conseils

Jetez un oeil à l'ERD au milieu de cette . Affacturage la hiérarchie dans une table séparée vous permet de prendre en charge plusieurs taxonomies.

Tout d'abord vous demander ce que le but est de maintenir la hiérarchie dans la base de données et quelles fonctionnalités vous gagnez par cela. Ensuite, demandez examiner les travaux et l'entretien qui va en faire.

Si vous êtes tout simplement l'utiliser pour remplir un contrôle de l'arbre, il y a des contrôles intégrés qui vont directement contre le système de dossier. Est-ce que travailler mieux pour vous? gagnez-vous quelque chose au-delà en les stockant dans la base de données? Comment comptez-vous garder la base de données en phase avec le système de dossier réel, qui peut être changé en dehors de la DB? À moins que votre fourniture d'un système de fichiers virtuel, il peut être préférable de simplement aller directement contre la chose réelle avec des chemins pertinents stockés dans la base de données.

SQL Server a un type de données hierarchyid qui a le soutien des structures hiérarchiques. Fonctionne uniquement dans la version complète, vous l'esprit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top