Dans le cadre de différents projets, j'ai expérimenté les deux méthodes et nous avons finalement décidé qu'il était plus facile d'utiliser également le système de fichiers. Après tout, le système de fichiers est déjà optimisé pour le stockage, la récupération et l'indexation des fichiers.
Le seul conseil que je pourrais donner à ce sujet est de ne stocker qu'un chemin "Root relatif" vers le fichier dans la base de données, puis de faire en sorte que votre programme ou vos requêtes/procédures stockées/logiciels intermédiaires utilisent un paramètre Root spécifique à l'installation pour récupérer le fichier.
Par exemple, si vous stockez XYZ.Wav dans le répertoire C:\MyProgram\Data\Sounds\X\ le chemin complet serait
C:\MyProgram\Data\Sounds\X\XYZ.Wav
Mais vous stockeriez le chemin d'accès et/ou le nom du fichier dans la base de données comme :
X\XYZ.Wav
Ailleurs, dans la base de données ou dans les fichiers de configuration de votre programme, stockez un chemin racine comme SoundFilePath égal à
C:\MyProgram\Data\Sounds\
Bien sûr, c'est à vous de décider où vous séparez la racine du chemin de la base de données. Ainsi, si vous déplacez l'installation de votre programme, vous n'aurez pas à mettre à jour la base de données.
De plus, s'il doit y avoir lots de fichiers, trouvez un moyen de hacher les chemins afin de ne pas vous retrouver avec un répertoire contenant des centaines ou des milliers de fichiers (dans mon petit exemple, il y a des sous-répertoires basés sur le premier caractère du nom de fichier, mais vous pouvez aller plus loin ou utiliser des hachages aléatoires). Cela rend les indexeurs de recherche heureux également.