Domanda

Quindi, stai scrivendo un'applicazione web e hai diverse aree del sito in cui l'utente può caricare file.Il mio metodo di lavoro di base per questo è memorizzare il file effettivo sul server e avere una tabella di database che collega il nome file memorizzato al record a cui si riferisce.

La mia domanda è questa:Dovrebbe esserci una tabella diversa per ogni "tipo" di file?Inoltre, i file dovrebbero essere archiviati in posizioni correlate al contesto sul server o tutti insieme?

Qualche esempio:foto del profilo utente, CV di domande di lavoro, documenti correlati sulle pagine CMS, ecc.

È stato utile?

Soluzione

Dal tuo esempio, c'è un argomento per due tabelle, poiché hai file che possono essere associati a due cose diverse.

  • CV e foto sono associati a un utente.
  • gli allegati sono associati a una pagina CMS.

Se li inserisci in una tabella (e vuoi consentire agli utenti di avere più di una foto o cv), allora avrai bisogno di due tabelle di collegamento per associare file->utenti e file->cms_pages.Probabilmente ciò implica una relazione HABTM, che non è corretta e consente dati incoerenti.

L'approccio a due tabelle è leggermente più pulito e consente solo di associare i file al tipo corretto di entità con una semplice relazione di appartenenza.

Ma non penso che ci sia una risposta "giusta" a questa domanda, a meno che non sia necessario archiviare diversi tipi di metadati per diversi tipi di file.

Assicurati inoltre di archiviare, o di essere in grado di calcolare, il tipo MIME per ciascun file in modo che possa essere restituito correttamente al browser, con le intestazioni HTTP corrette.

Altri suggerimenti

Da quello che hai detto, memorizzerei semplicemente i file con nomi di file casuali (UUID o altro) in un unico posto.Avrei quindi una tabella "allegati" o qualcosa che contenga riferimenti a tutti i tuoi file esterni.Questa tabella conterrebbe anche i metadati di quel file, quindi che tipo di file è (immagine, CV, ecc.) e così via.

Tuttavia, potrebbero esserci limiti rigidi al numero di file in una directory, a seconda del FS che stai utilizzando.

Potrebbero esserci vari motivi per archiviare file diversi in posizioni diverse.

Innanzitutto, potrebbe essere presa in considerazione una limitazione sul numero di file in una directory.

In secondo luogo, la sicurezza potrebbe essere un problema: se alcuni devono essere visibili pubblicamente (come ad esempio le foto del profilo) ma altri non lo sono (come i CV), inserirli in directory diverse sarebbe più facile da gestire.

In terzo luogo, semplici attività di amministrazione potrebbero essere più semplici se i file vengono divisi, ad esempio la navigazione in un esploratore di file, la gestione dei backup o la modifica dell'applicazione per dividere l'archiviazione dei file in più posizioni.

C'è anche il problema dei conflitti tra i nomi dei file, ma se rinomini tutto in modo che corrisponda al campo ID del database (ad esempio), questo non sarebbe un problema.

Ma alla fine probabilmente dipende dai volumi e dalle tue preferenze.

Una tabella diversa per ogni tipo di file diventa rilevante solo se memorizzi altri metadati (e quindi colonne aggiuntive) per ogni tipo di file.Se le tue tabelle per ciascun tipo di file contengono solo le stesse colonne (ad esempio, nome file, tipo file, data caricata, ecc.), allora avrebbe senso averle tutte su un'unica tabella.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top