Есть некая интересная задачка, которую я уже на протяжении очень долгого времени не могу красиво порешать.
Это реализация структуры финансового учета в проекте.
Давайте представим, что нужно сделать раздел "История денежного оборота", где будет выводиться список движения финансов с более-менее подробной информацией, например вот так:
Пользователь Вася перевел $10 пользователю Пете
Пользователь Вася вывел $100 через систему "Приват Банк"
Пользователь Петя перевел Вам $15
Активация в тарифный план "Старт" за $25
Оплата $15 за услугу "Смена логина"
Оплата $100 за услугу "Поднять объявление в топ".
Квартира на сутки №1, Квартира на сутки №2, Квартира на сутки №3, Квартира на сутки №4
Самая основная проблема заключается в том, что эту информацию нужно хранить не статично, а брать из других таблиц, для того, чтобы если Вася или Петя поменял логин, у всех в историях это изменилось. (Примеры взяты из головы, поэтому особо не обращайте внимание на конкретику).
Теперь более детальный пример
К примеру есть следующие типы услуг:
- Поднять объявления в топ
- Сменить логин
- Купить подписку на "тарифный план"
- Оплатить заказ товара
Задача: зафиксировать идентификаторы сущностей, которые фигурируют в заказе и отобразить из.
Рассмотрим на примере "Поднять объявления в топ" и "Купить подписку на 'тарифный план'".
Наша задача записать где-то список id из таблицы объявлений и id из таблицы тарифных планов, чтобы получить необходимые данные для рендера.
Проблема в том, что одним запросом историю денежного оборота не собрать, так как на основе типа услуги нужно узнавать к какой таблице относятся записанные id. От сюда выйдет, что мы может достать только список всех операций, а потом для каждой операции в цикле исходя из условия делать запрос в нужные таблицы, чтобы получить информацию с чем мы вообще работаем.
Тоесть если у нас задача отобразить 100 записей, то на каждую запись будет по 1 запросу и это выходит более 100 запросов в бд для рендера страницы. Как-то не хорошо.
Собственно поделитесь пожалуйста советом по реализации...