目前,我有两个表ExerciseWorkoutPlan。这些将有多对多的关系。

Exercise
    - ID
    - Name
    ...

WorkoutPlan
    - ID
    - Name
    - Exercises (Many to Many with Exercise through WorkoutPlanExercise)
    ...


在此“多对多”关系表中,我需要存储有关许多sets的信息,例如min_restmax_restmin_repetitionsmax_repetitions

我遇到的困难是,试图找出最佳解决方案来做到这一点。我的第一个解决方案是让另一个表(WorkoutPlanExerciseSet)与多对多表(WorkoutPlanExercise)具有多对一关系,如下所示。

WorkoutPlanExercise
    - ID
    - ExerciseID
    - WorkoutPlanID
    - Sets (One to Many with WorkoutPlanExerciseSet)

WorkoutPlanExerciseSet
    - WorkoutPlanExerciseID
    - MinRepititions
    - MaxRepititions
    - MinRest
    - MaxRest


我的第二个解决方案是将有关练习集的所有信息存储在多对多关系表(WorkoutPlanExercise)中的一行中。例如:

WorkoutPlanExercise
ID      ExerciseID      WorkoutPlanID       Sets        Repititions             Rest
1       1               1                   3           10-12, 10-10, 12-12     90-120, 60-90, 30-30


要注意的是,休息时间和重复次数都可以是范围或单个数字。对于第二个解决方案,我想我将创建一个自定义的Django Form Field。

哪个更好?是以前的不良数据库设计吗?后者是不好的应用程序设计吗?

如果有什么不同,我希望能够以用户友好的方式轻松显示信息,例如:

Example Workout Plan
Exercise        Sets        Repetitions         Rest
Pull Ups        3           10 - 12             90 - 120
                            8 - 10              30
                            6 - 8               30

最佳答案

我想第二。了解有关自定义through字段here的信息。

更新:查看评论。

更新2:3

其实,两者都很好。这取决于您要如何处理存储在RepetitionsRest字段中的数据。如果要对数据进行大量操作和计算,请执行e。 G。计算WorkoutPlan的总休息时间或练习的总重复次数,那么使用以前的方法会稍微容易一些。

更新4:

在一个字段中存储与CSV相同类型的数据是个坏主意。如果将来必须更改架构,将会有很多乐趣。使用第一种方法。也是link1link2

09-19 03:33