another_dream
@another_dream
Backend-разработчик, Laravel/ZF2/Yii2

Как правильно работать с двумя источниками данных почти одного типа сущности?

Таблицы:
- products_rus (российские продукты)
- products_usda (продукты из ndb.nal.usda.gov)
- favourite_products (избранные продукты пользователей, связь 1to1 через эту таблицу, поля user product)
- users

Внедряем вторую таблицу продуктов (американская база) и теперь встала задача реализовать имеющийся функционал сильно не меняя архитектуру проекта.

Русская база продуктов имеет n полей, в свою очередь американская - n+48. То есть сходные поля у них есть и сущности наследуются от единого интерфейса (даже, скорее, абстрактного класса).
favourite_products, само собой имеет внешние ключи к таблице с юзерами и к таблице с продуктами (products_rus).
Юзер, в зависимости от локали, получает доступ к определённому репозиторию (русская база или американская).

Разумно ли отказаться в данном случае от внешнего ключа в favourite_products (до products_rus)?
Были ли у кого подобные задачи и каким образом их можно решать?
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
@AlexndrNovikov
Solution Architect in Spiral Scout
Ну зачем же дублировать поля
Оставить одну таблицу products с n полей (общих)
Добавить отдельную таблицу-маппер products <=> language (сначала предложил вариант с доп полем в самом products, но может быть ситуация когда один продукт есть на двух рынках)
например со структурой product_id language
Добавить таблицу extra_fields с полями product_id field_name value - получаем бесконечную масштабируемость разных полей для любого продукта
favourite_products и users оставляем в прежней схеме
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы