You need to create a new data type called “exercise_set” (or whatever you want).
Then you create a field in your exercise data type (as in you question 1) called sets but with the “Field type” set to “exercise_set” (the data type you just created) and check the list box as you have.
Example of data type "exercise_set) and it´s fields.
If you want 3 sets of an exercise you create 3 “things” as exercise_sets and populate the fields on each of them with data like “reps”, “notes”, “order” etc.
Then on the data type “exercise” you´ve created a field of “exercise_sets” as a list.
Once you´ve created a new “exercise_set” you add it to the list of sets in the current “exercise”. This answers your question 2. The number of sets you create with a connection to the exercise is the number of sets. Evert set is a new data entry.
I also make sure to have a field on the “exercise_set” called “exercise” and one called “workout”. This way you can both pull the list straight from the “exercise´s” list of “exercise_sets”, but more often I want to do a "search for exercise_sets with “exercise = current exercise”.
They way I built this every exercise is a unique data entry for every new workout. This gives me more options for users to modify sets and reps on their own. Let´s say the coach says you should do 4 sets of 5 reps on 50kg. But you only manage to do 4 reps on the last set. Then this users should be able to modify that.
However, if the app is more for general workouts where the user isn´t supposed to log their own performance; you could probably make it a bit less complex.
Does this make any sense?
If not let me know how I can be more specific and clear.