Во-первых, вы повторяете некоторую информацию без необходимости. Вам не нужен feature_id в таблице соотношения функций продукта. Это может прийти из вашей таблицы вариантов функций. Если вы добавляете новые атрибуты продукта, вам придется продублировать эту информацию. Также вы можете попасть в противоречивое состояние. Если в некоторых ваших отчетах используется идентификатор функции из одной таблицы, а в другой используется другая таблица, и вы забыли обновить один из них, у вас может быть отчет, который по-прежнему показывает неверную информацию.
Чтобы ответить на вопрос, вы просто объединяетесь за столами.
select pf.product_id, f.name, fv.name
from productfeatures pf
inner join featurevariants fv on pf.variant_id = fv.variant_id
inner join features on fv.feature_id = f.feature_id
В вашем примере нет таблицы продуктов, но если вы это сделали, вы также можете присоединиться к ней и получить имя продукта вместо идентификатора, если хотите.
надеюсь, это поможет!