En mi aplicación de rieles, un usuario puede tener una estructura de directorio que tenga carpetas y archivos en subcarpetas. ¿Cuál es la mejor manera de almacenar esos datos?
Además, ¿qué base de datos ofrece la mejor manera de hacerlo?Almacenar una estructura de directorio en la base de datos
Respuesta
Puede almacenar un árbol de directorios en una sola tabla utilizando cualquier base de datos SQL, haciendo que la tabla sea autorreferencial. Un buen ejemplo es el Windows Installer's Directory table, donde verá una estructura como esta:
- Directorio campo id clave = primaria, por lo general un número entero
- Directory_Parent = "clave externa" campo ID, que puntos a la identificación de otro directorio en la misma tabla
- Valor = cadena que contiene el nombre del directorio/carpeta
Su tabla de archivos tendrá una clave externa que hace referencia a la Id. Del directorio. Para encontrar la ruta completa, debe seguirla por la cadena y crear la ruta desde el final (derecha), al pasar cada directorio principal al frente (izquierda). Por ejemplo, el archivo apuntaría a la Id. De directorio '4' con la 'subcarpeta' de Value, luego buscará la 'carpeta' de valor de los padres, luego los padres volverán a valorar hasta llegar a la raíz, creando una ruta como /root/folder/subfolder/filename
.
Es un árbol simple almacenado en sql. Compruebe el esquema estándar parent-child
o implemente el esquema de recorrido de árbol preordenado (izquierda-derecha).
Si su base de datos admite consultas recursivas (ya sea Oracle connect by o las expresiones de tabla comunes recursivas estándar), una tabla de autorreferencia está bien (es fácil de actualizar y consultar).
Si su DBMS no admite consultas jerárquicas, la sugerencia de Eimantas de utilizar un esquema de recorrido de árbol preordenado es probablemente la mejor manera.
- 1. ¿Cómo almacenar el directorio/jerarquía/estructura de árbol en la base de datos?
- 2. almacenar algunos datos en la estructura inode
- 3. Mejor estructura de base de datos para almacenar feeds RSS
- 4. ¿Estructura de datos para almacenar una gran cantidad de datos?
- 5. Estructura de la base de datos SQL
- 6. cómo almacenar datos en la base de datos en HTML5
- 7. Estructura de datos para almacenar matrices dispersas
- 8. Estructura de datos para almacenar Rangos
- 9. Estructura de datos para almacenar eventos recurrentes?
- 10. Estructura de la base de datos para almacenar estadísticas por día, semana, mes, año
- 11. libros de almacenar en una base de datos
- 12. Esquema de la base de datos para almacenar datos SNMP
- 13. Forma estándar de almacenar nombres en una base de datos
- 14. Almacenar en Datos de Sesión vs almacenar en Base de Datos Sql para datos temporales
- 15. Estructura de la base de datos para estructura de datos de árbol
- 16. ¿Almacenar datos estáticos en una matriz o en una base de datos?
- 17. Optimización de la estructura de la base de datos
- 18. ¿Es bueno almacenar cadenas largas en una base de datos?
- 19. Cómo almacenar html en una base de datos mysql
- 20. ¿Es posible almacenar javascript en una base de datos?
- 21. Cómo almacenar objetos TimeZoneInfo en una base de datos?
- 22. Almacenar un HashMap en una base de datos SQL
- 23. gestión de errores elmah - almacenar en la base de datos
- 24. Almacenar hora de fecha UTC en la base de datos
- 25. # estructura de datos que almacena C en una base de datos SQL
- 26. ¿Es "malo" almacenar XML en una base de datos?
- 27. Almacenar imágenes en una base de datos MongoDB
- 28. Cómo almacenar objetos en la base de datos sqlite?
- 29. Tomcat: Almacenar sesión en la base de datos
- 30. Cómo almacenar un árbol en la base de datos SQL
¿Hay algún truco para reducir el número de consultas a menos de la profundidad del archivo? – cyang
@cyang Ninguna que yo sepa para este método de tabla autorreferencial. Existen, por supuesto, otras posibilidades de diseño que se verían bastante diferentes; por ejemplo, podría diseñar un sistema en el que cada archivo tenga un nombre complejo totalmente único y, por lo tanto, solo se necesitaría una sola tabla db para almacenar el directorio real ubicación ... – ewall
@cyang: puede usar este método, pero tiene otro campo que tiene los IDs en la cadena con un delimitador. Algo así como 447: 33: 2: 185 para significar/[carpeta447]/[carpeta33]/[etc]/[esta carpeta]. Luego puede extraer una carpeta determinada y sus padres en dos consultas. Por supuesto, ahora tiene la sobrecarga de crear y administrar ese campo cuando crea o mueve el directorio, pero al menos solo tendría que hacer eso una vez por vez. Simplemente no dejes que se desincronice con los padres reales. Y sí, antes de que alguien se asuste, se trata de datos duplicados. Se llama atajo = o) – Eli