IMO, это зависит от того, какой приоритет нужно отдать производительности и модульному дизайну.
Если бы это было торговое приложение, в котором мне пришлось бы мгновенно рассчитывать цены по разным таблицам, я бы использовал хранимую процедуру
- Лучшая производительность для определенного объема нагрузки, но когда он получает слишком много запросов, тогда распределенная база данных становится необходимой
- Одним из недостатков является то, что если вы хотите в будущем перейти на другую базу данных (в большинстве случаев это не так), то вам придется перенести сохраненный процесс на новые
Другой вариант, который у меня был бы, - хранить большинство значений в распределенном кэше (например, в memcache) и выполнять вычисления на бизнес-уровне.
- Значения будут предварительно заполнены в кеш, а кеш будет обновляться по мере внесения изменений.
- Это дает гибкость в плане удаления зависимости от базы данных.
Но мне кажется, что ваши операции довольно сильно зависят от БД и предлагают маршрут хранимой процедуры. Если вы считаете, что возможен второй вариант кэширования, стоит попробовать.