Nella mia app per rotaie un utente può avere una struttura di directory che ha cartelle e file in sottocartelle. Qual è il modo migliore per archiviare tali dati ??
Inoltre, quale database offre il modo migliore per farlo?Memorizzazione di una struttura di directory nel database
risposta
È possibile memorizzare una struttura di directory in una singola tabella utilizzando qualsiasi database SQL, rendendo la tabella autoreferenziale. Un buon esempio è il Windows Installer's Directory table, dove si trova una struttura come questa:
- Directory = primaria campo id chiave, di solito un intero
- Directory_Parent = "chiave esterna" campo ID, che punta per l'id di un'altra directory nella stessa tabella
- Valore = stringa contenente il nome della directory/cartelle
La tabella dei file avrà quindi una chiave esterna che fa riferimento all'ID della directory. Per trovare il percorso completo, è necessario seguirlo lungo la catena e costruire il percorso dalla fine (a destra), attaccando la directory principale in avanti (a sinistra). Ad esempio, il file punterebbe a Directory id '4' con il valore 'sottocartella', quindi si recupera il valore 'cartella' del genitore, quindi il valore dei genitori di nuovo fino a raggiungere la radice, creando un percorso come /root/folder/subfolder/filename
.
È albero semplice memorizzato in sql. Controllare lo schema standard parent-child
o implementare lo schema di attraversamento dell'albero preordinato (sinistra-destra).
Se il database supporta query ricorsive (sia Oracle che connette da o le espressioni di tabella comuni ricorsive standard), allora una tabella di riferimento automatico va bene (è facile da aggiornare e interrogare).
Se il DBMS non supporta le query gerarchiche, suggerire a Eimantas di utilizzare uno schema di attraversamento dell'albero preordinato è probabilmente il modo migliore.
- 1. Memorizzazione di JSON nel database MySQL?
- 2. Memorizzazione di chiavi private nel database
- 3. Miglior struttura del database per la memorizzazione di feed RSS
- 4. Memorizzazione di ASP.Net MVC Visualizzazioni nel database
- 5. Memorizzazione di enum nel database MySQL
- 6. Memorizzazione di informazioni EXIF nel database
- 7. Memorizzazione di valuta nel database Android SQlite
- 8. Memorizzazione di matrici nel database utilizzando ActiveRecord
- 9. Memorizzazione UUID nel database HSQLDB
- 10. Struttura del database per la memorizzazione dei dati storici
- 11. Struttura di directory per una libreria C++
- 12. Struttura di directory Maven
- 13. Android - Memorizzazione di dati sensibili nel database sqlite
- 14. Memorizzazione dei valori di valuta nel database MySQL
- 15. Struttura di directory di Octopress
- 16. Metodo preferito di memorizzazione delle password nel database
- 17. Struttura di directory per MVC
- 18. Unisci struttura di directory non controllata nel repository SVN
- 19. Struttura della directory di Django?
- 20. Memorizzazione di file audio in un database
- 21. Modifica di una struttura di directory in Mercurial
- 22. Database specializzato nella memorizzazione di dati binari
- 23. Mantenere una struttura di directory diversa in diversi rami git
- 24. Implementazione di una struttura gerarchica di dati in un database
- 25. Struttura di directory del tema in calcestruzzo5
- 26. Memorizzazione di libri in un database
- 27. Struttura di directory di interfacce Java?
- 28. Struttura directory Maven Android
- 29. Struttura di directory del progetto Ember.js
- 30. Memorizzazione di JSON in un database msSQL?
C'è qualche trucco per ridurre il numero di query a meno della profondità del file? – cyang
@cyang Nessuno che conosca per questo metodo di riferimento autoreferenziale. Esistono, naturalmente, altre possibilità di progettazione che sembrano molto diverse: ad esempio, potresti ideare un sistema in cui ogni file abbia un nome complesso totalmente unico, e quindi sarebbe necessaria solo una singola tabella db per memorizzare la directory effettiva posizione ... – ewall
@cyang: è possibile utilizzare questo metodo, ma disporre di un altro campo con gli ID della catena con un delimitatore. Qualcosa come 447: 33: 2: 185 per significare/[cartella447]/[cartella33]/[ecc.]/[Questa cartella]. Quindi è possibile estrarre una determinata cartella e i relativi genitori in due query. Naturalmente, ora si ha il sovraccarico di creare e gestire quel campo quando si crea o si sposta la directory, ma almeno si dovrebbe farlo una volta alla volta. Non lasciare che vada fuori sincrono con i genitori effettivi. E sì, prima che qualcuno impazzisca, si tratta di dati duplicati. Si chiama scorciatoia = o) – Eli