Все зависит от точных отношений между всеми вашими объектами.Ваше описание было немного нечетким, поэтому я собираюсь сделать некоторые предположения здесь, но вот что я из этого извлекаю:
Основное правило: использовать только таблицы объединения (например, Gallery_Image_Relationship (gallery_id, image_id)) когда у вас есть отношения многие ко многим;Я подозреваю, что галерея-изображение является хорошим примером.Галерея содержит много изображений, и изображение может принадлежать многим галереям.Для всего остального, однако, это просто ненужное усложнение.
Для остальных ваших отношений просто поместите внешний ключ в одну из ваших таблиц.Если это один ко многим, таблица очевидна: пользователь может загрузить много изображений, но изображение может быть загружено только одним пользователем?Затем ваша таблица изображений получает столбец uploader_id.
Тем не менее, вот во что это превратится в вашей БД:
users:
id,
name,
profile_image_id, #A user can only have one profile pic (at a time)
etc.
images:
id,
name,
uploader_id, #It can only be uploded by one person
etc.
galleries:
id,
name,
cover_image_id,
etc.
images_galleries: # 'cause images:galleries is many:many
image_id,
gallery_id
(я понятия не имею, на каком языке SO это думает.выделены user
, by
, is
и апостроф ...)
Это становится более субъективным, когда вы пытаетесь привязать изображения к объектам и / или событиям.Ожидаете ли вы, что большинство / все ваши изображения относятся к определенному событию?Если это так, то вам, вероятно, понадобится столбец event_id в вашей таблице изображений.То же самое относится и к объектам.
Но если вы ожидаете, что многие изображения не будут иметь какого-либо конкретного события, тогда эти столбцы будут просто пустой тратой пространства БД.Так будет ли галерея обычно привязана к одному событию / месту?Если это так, то именно к этому относятся ваши внешние ключи.
И если ни один из них не подходит слишком хорошо, тогда ваши таблицы соединения по-прежнему являются опцией.Я сомневаюсь, что нормализаторы одобрили бы это, но иногда вам не нужно быть разборчивым.
Надеюсь, это поможет!