0

Я проектирую сайт исторических зданий, где пользователь может загружать несколько изображений с помощью Shrine. Я пытаюсь придумать проект БД, который позволил бы мне выполнить эти мои требования:Дизайн Rails DB: альбомы и безжизненные изображения с JSONB и PostgreSQL

  • Пользователь может создать альбом. Этот альбом должен принадлежать к зданию
  • альбома, может содержать произвольное количество изображений
  • Проблемы: некоторые изображения не должны принадлежать к альбому.
    Я должен иметь возможность загружать альбом без содержания и использовать его в описании здания или в тексте блога, где нет смысла помещать его в любой альбом. В таблице Images не должно быть album_id. Галереи получат свои идентификаторы изображений из столбца JSONB изображения.

решения я мог думать:

  1. Полиморфные изображения. Это приведет к вставке столбцов imageable_type и imageable_id в таблицу «Изображения», чтобы сохранить родительскую модель и ее идентификатор записи. Чтобы сохранить идентификатор альбома, к которому принадлежит это изображение, я мог бы избежать использования столбца базы данных album_id в таблице Images и использовать мой существующий столбец JSONB в таблице Images и вместо этого разместить там (я помещаю описание изображения и другие вещи там, и я хочу сохранить это таким образом).
    Плюсы: imageable_type может быть Building, Blog, Album - он охватывает все, что мне нужно.
    Минусы: чувствует себя своего рода грязный и странно

  2. не используя каких-либо неявное отношения ActiveRecord вообще (не has_many, belongs_to), потому что у меня нет album_id для одиночных изображений в блогах и описания строительных. Объединение вручную с использованием идентификаторов изображений в столбцах JSONB.

Я действительно ценю любые дизайнерские идеи здесь. Мозговой штурм!

ответ

0

Просто для тех, кто пытается решить, я использовал полиморфные изображения. Если изображение добавлено в галерею, его образный тип - Gallery, который добавляет их в подходящую галерею.

Спасибо за помощь.