Nell'eventualita' non volessi usare il CMS (la scelta dipende da te) provo a spiegartelo io.
In genere si fa sempre come dici tu: nel db si salva soltanto il link. Generalmente si crea una cartella apposita per le immagini e le immagine che l'utente carica vanno a finire li' dentro rinominate in maniera apposita. Un metodo semplice di rinominarle e':
1) Se nel db hai una tabella immagini, puoi impostare il nome uguale allo stesso id che quell'immagine ha all'interno del db. Per esempio, se nel db quell'immagine ha id 5, tu la chiami 5.jpg (.esentione del file originale)
2) prendi l'attuale orario epoch (il numero di secondi trascorsi da una data precisa, qualcosa attorno al 1970) che e' un intero che si incrementa ogni secondo e metti all'immagine quel nome. Se temi che gli utenti carichino in contemporanea piu' di una sola immagine al secondo (magari due utenti in contemporanea), a quel valore concateni un numero casuale.
Io propendo per la prima soluzione:
- Piu' semplice
- Nomi piu' corti
- meno dati da salvare nel db