Тут мне нравится подход в WordPress:
- В базе данных хранятся имена файлов (
aaa.png
, bbb.jpg
);
- Отдельно в БД или ещё где-то хранится путь к каталогу, где эти файлы искать. (
/path/to/img/folder/
);
- В файловой системе в указанном выше каталоге, хранятся все файлы с указанными выше именами;
- Отдельно в том же месте хранятся оптимизированные, уменьшенные, как либо измененные файлы, с тем же именем но специальным суффиксом. (
aaa-100-100.png
, aaa-800-600.png
, aaa-4k.png
).
- А далее всё просто: при необходимости получить конечный урл на файл мы указываем ИД файла в БД и суфикс.
<?php
getImageURL(1, '800-600'); // → /path/to/img/folder/aaa-800-600.png
?>
И уже эта функция подставляет нужный суффикс и префикс к пути.
Таким образом можно физически хранить несколько модификаций одного и того же файла в файловой системе, но иметь только одну запись в БД и при необходимости легко получать разные версии одного файла в разных местах сайта.