Pregunta

Tengo objetos que representan carpetas y me pregunto si ellos deben estar representados en la base de datos.

Por un lado parece que la manera más sencilla sería la de no representar objetos de carpeta y simplemente almacenar un valor de ruta para los objetos contenidos en una carpeta. Problemas que veo con esto es que no se puede persistir una carpeta cuyos descendientes no contienen ningún artículo, que no es demasiado grande de un acuerdo. Además no tengo una idea clara de cómo cargar la jerarquía de carpetas para mostrar (como en un TreeView) sin cargar todo en la memoria por adelantado, lo que probablemente sería un problema de rendimiento.

La alternativa es tener una tabla de "Carpeta" con referencias a su carpeta principal. Esto parece que debería funcionar, pero estoy seguro de cómo permitir que las carpetas con el mismo nombre, siempre y cuando no comparten un padre. En caso de que incluso ser algo que el PP debe ser preocupante en sí con o es que algo que yo debería cumplir en la lógica del negocio?

¿Fue útil?

Solución

La idea es algo como esto (autorreferencia):

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
)

Otros consejos

Tome un vistazo a la ERD en el medio de esta página . Factorización de la jerarquía en una tabla separada que permite dar soporte a múltiples taxonomías.

En primer lugar preguntarse cuál es el propósito de mantener la jerarquía en la base de datos y la funcionalidad que se gana con eso. Luego pida a considerar el trabajo y el mantenimiento que se dedica a hacerlo.

Si sólo va a utilizar para rellenar un control de árbol, hay controles integrados que van directamente contra el sistema de carpetas. Habría que funcione mejor para usted? Qué ganas algo más allá que almacenándolo en la base de datos? ¿Cómo se va a mantener la base de datos en sincronía con el sistema de carpeta real, que puede ser cambiado fuera de la base de datos? A menos que su proporcionando un sistema de archivos virtual que puede ser mejor para ir directamente en contra de lo real con rutas relevantes almacenados en la base de datos.

SQL Server tiene un tipo de datos que tiene hierarchyid apoyo a las estructuras jerárquicas. Sólo funciona en la versión completa, le importaría.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top