Есть таблица StorageItem, которая представляет из себя краткую инфу о файле и его ссылку на удаленном хранилище.
Есть промежуточные таблицы UserFiles, ProductFiles и тд., которые хранят ссылку на юзера/продукт и сторедж айтем. Таким образом выходит, что хранилище для всех файлов всех сущностей якобы одно. Но из-за этого на один сторедж айтем может сослаться и юзер, и продукт, хотя такого быть не должно.
Думаю я, что
> Есть промежуточные таблицы UserFiles, ProductFiles и тд., которые хранят ссылку на юзера/продукт и сторедж айтем.
Все эти таблицы надо слить в одну, где будет проставлен нужный тип: user, product, etc; и ключ, совпадающий с ПК storageitem.