Как правильно построить архитектуру БД?
В таблицах Event и User должно быть по строковому полю - имя файла. И всё. Городить же дополнительные таблицы - это бессмысленно усложнять ту самую архитектуру БД.
Если уж тебе так хочется сделать централизованное хранилище картинок - делаешь в Event и User по полю file_id, ссылающихся на таблицу File. Но никаких ссылок на Event и User в таблице File вообще быть не должно. Тебе надо выбрать картинку при отображении записи - это делается связью из Event/User к File. Для каких задач тебе может потребоваться связь в обратную сторону?
N.B. Чтобы определить - принадлежит ли файл пользователю - не требуется связь из File к User, достаточно связи из User к File.
Ну вопервых это не глупость, в рамках задачи очень даже нормально, так как File слишком общая штука. А если вам понадобится сделать связь многие ко многим еще к одной таблице? Или превью для ивента станет несколько?
Короче либо делайте две разные таблицы, либо заводите одну общую и связывайте их через many-to-many. Либо да, одна таблица с полем type и двумя порейдж кеями на таблицы event и user.