У меня нет опыта, специфичного для my-sql, но с моделированием базы данных в целом
Очень важно понимать разницу между первичным и вторичным ключами.Даже если многие базы данных (я точно знаю, что это делает Oracle) разрешают указывать уникальный (простой или составной) ключ в качестве цели FK, это не считается наилучшей практикой.Вместо этого используйте PK.
FK для вторичного ключа следует использовать imo только для того, чтобы относиться к таблицам, которые не находятся под вашим контролем.
В вашем конкретном случае я бы определенно передал FK to widget_id:это потому, что widget_id должен быть вашим PK, а составная часть только сделана уникальной (и, конечно, не нулевой).Это приводит к повышению производительности в гривневых случаях, поскольку вы присоединяете только один столбец в запросах, и, как правило, считается оптимальной практикой (Google суррогатный ключ для получения дополнительной информации)