Предположим, есть БД с подобной структурой:
Приложение, которое будет работать с БД представляет из себя API. Пользователи API могут запрашивать посты следующим образом: /posts/1/?language=ru. В результате пользователь должен получить модель такого вида:
{
"id": 1,
"category": {
"id": 5,
"name": "ru_category"
},
"title": "ru_title",
"text": "ru_text",
"created_at": "date"
}
Если запрашиваемого перевода не существует, API должен вернуть перевод по умолчанию (например, на английском языке).
Как лучше реализовать слой доступа к данным? Один из вариантов - реализовать репозитории для таблиц сущностей и для таблиц переводов. Тогда BlogPostsRepository будет получать информацию о постах, которая в переводе не нуждается, а BlogPostTranslationsRepository будет получать информацию о переводах постов.
Для возвращения модели, рассмотренной выше, придется получить информацию о посте, затем информацию о переводах поста (на запрашиваемом языке + на языке по умолчанию), затем такие же операции провести для категорий, после чего смаппить это все на одну модель и отдать пользователю.
В этом варианте меня смущает слишком большое количество операций. В случае, когда с постами связано больше таблиц (например, комментарии, теги и т.д.), запросов получится еще больше.