Я проектирую сайт исторических зданий, где пользователь может загружать несколько изображений с помощью Shrine. Я пытаюсь придумать проект БД, который позволил бы мне выполнить эти мои требования:Дизайн Rails DB: альбомы и безжизненные изображения с JSONB и PostgreSQL
- Пользователь может создать альбом. Этот альбом должен принадлежать к зданию
- альбома, может содержать произвольное количество изображений
- Проблемы: некоторые изображения не должны принадлежать к альбому.
Я должен иметь возможность загружать альбом без содержания и использовать его в описании здания или в тексте блога, где нет смысла помещать его в любой альбом. В таблицеImages
не должно бытьalbum_id
. Галереи получат свои идентификаторы изображений из столбца JSONB изображения.
решения я мог думать:
Полиморфные изображения. Это приведет к вставке столбцов
imageable_type
иimageable_id
в таблицу «Изображения», чтобы сохранить родительскую модель и ее идентификатор записи. Чтобы сохранить идентификатор альбома, к которому принадлежит это изображение, я мог бы избежать использования столбца базы данныхalbum_id
в таблицеImages
и использовать мой существующий столбец JSONB в таблицеImages
и вместо этого разместить там (я помещаю описание изображения и другие вещи там, и я хочу сохранить это таким образом).
Плюсы:imageable_type
может бытьBuilding, Blog, Album
- он охватывает все, что мне нужно.
Минусы: чувствует себя своего рода грязный и странноне используя каких-либо неявное отношения ActiveRecord вообще (не has_many, belongs_to), потому что у меня нет
album_id
для одиночных изображений в блогах и описания строительных. Объединение вручную с использованием идентификаторов изображений в столбцах JSONB.
Я действительно ценю любые дизайнерские идеи здесь. Мозговой штурм!