This is a one-to-many relationship.
Your relational design is sound. The table design you have supports these requirements;
An Interval occurs in exactly 1 Workout.
1 Workout has zero, one or more Intervals.
An Interval has a position (sequence) within a Workout.
There is no need for a third table, unless you are introducing another entity.
Update:
The table definition shown in the question is different than the table design added in the comment.
If you want to model a many-to-many relationship, you would use three tables.
interval
id
message_en
duration
etc.
workout
id
name
workout_interval
id
workout_id (fk references workout.id)
seq_workout
interval_id (fk references interval.id)
etc.
This model is a many-to-many.
The workout_interval table is the "relationship" between the Workout and the Interval. With this model
An Interval can appear in zero, one or more Workout, and a Workout can have zero, one or more Interval.
Any attributes that are specific to a particular Interval within a Workout can be added to the relationship table. Attributes of just the Interval (like a label or whatever), which doesn't change, those would be on the Interval table.
For example, if you are tracking workout results, you would record the weight and number of reps completed on the workout_interval table.
Update 2:
Given that you want an Interval to be used only in a single Workout, my the model in my previous update could be used, but it doesn't get you the constraint...
This model would provide that restriction. interval is a child of workout, and interval_seq is a child of interval.
workout
id
name
interval
id
workout_id (fk references workout.id)
message_en
etc.
interval_seq
id
interval_id (fk references interval.id)
seq_ (position within workout sequence 1,2,3,...)
etc.
To get the intervals within a workout in sequence, with repeats:
SELECT w.id
, s.seq_
, i.*
, s.*
FROM workout w
JOIN interval i
ON i.workout_id = w.id
JOIN interval_seq s
ON s.interval_id = i.id
WHERE w.id
ORDER BY w.id, s.seq_