Eu diria que isso exige um relacionamento 1:n, onde há uma tabela mestre de "treinos" e uma tabela de "componentes" unificada que contém todas as atividades de um treino.
Você teria sua tabela principal
workouts
:id int
participant varchar(255)
date datetime
...... any other workout related data
Em seguida, a tabela filha
workout_components
:workout_id int // Which workout this belongs to
tabindex int // Which sorting order this component has in the list
repeat int // Number of repetitions (e.g. 3 sets)
quantity int // e.g. 45 push-ups or 150 meters of cycling
quentity_unit varchar // e.g. minutes or laps
activity varchar // push-ups, cycling .....
um valor de exemplo ficaria assim:
mesa de treino:
id participant date
1 Harry Miller 2010-08-21
tabela treino_componentes:
workout_id tabindex repeat quantity quantity_unit activity
1 1 3 45 pcs pushups
1 2 1 2 minutes rope-jumping
Vantagens:
-
Não se limita a atividades específicas
-
Fácil de consultar - todas as perguntas relacionadas a como obter algo desse tipo de estrutura de dados já foram respondidas no SO
-
As atividades podem ser adicionadas livremente a cada treino