Я бы удалил столбец time_in_minutes из таблицы времен.Эта информация является избыточной, если она является просто суммой деталей и является преждевременной оптимизацией.
Я бы добавил таблицу product_time, содержащую product_id, times_id, и таблицу task_time, содержащую task_id, time_id
Тогдачтобы получить общее время с продуктом:
SELECT *
FROM product p
INNER JOIN product_time pt
ON pt.product_id = p.id
INNER JOIN (
SELECT times_id, SUM(time_in_minutes) as time_in_minutes
FROM times_intervals
GROUP BY times_id
) AS t
ON t.times_id = pt.times_id
Как правило, чтобы выполнить это, вы должны иметь некластеризованный покрывающий индекс для times_intervals со столбцами times_id и time_in_minutes - обратите внимание, что таблица times - это просто данные- без заголовка таблицы на данный момент и единственная цель - сгруппировать times_intervals, и это необходимо только потому, что у вас очень похожее расположение для задач.
Если не было двух (или более) объектов, использующих times_intervals,Вы можете просто поместить product_id в times_intervals и рассматривать его как свой заголовок / главный идентификатор.