2010-07-27 35 views

Respuesta

5

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.

+0

¿Hay algún truco para reducir el número de consultas a menos de la profundidad del archivo? – cyang

+1

@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

+0

@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

1

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).

2

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.

Cuestiones relacionadas