sql - 在这种情况下,“日”表是个好主意吗?
问题描述
所以,我和一个朋友正在设计一个Workout Tracker应用程序作为一个副项目。在此应用程序中,您可以拥有Programs
其中包括一组Workouts
其中有一堆Sets
. 假设您每天只训练一次,并不总是想要训练特定的Workout
,相反,您想在训练时添加练习。
因此,我们考虑创建一个名为的表,该表Day
将具有以下属性:
- ID - 作为主键(可能是日期)
- WorkoutID - 如果日期没有任何锻炼,则可为空。
另外,还有一张名为的辅助桌DayExercices
,用来放当天做的所有功法。
这些方案将允许我们链接 a Workout
(这将把我们带到它在表中的练习WorkoutExercices
),如果用户想在那天添加任何其他练习,这将是可能的,因为它将被添加到DayExercices
.
但是,这会被认为是好的做法吗?我们应该改变数据库方案吗?
这是当前的数据库方案。
解决方案
所以基本上从我的理解来看,一个练习确实可以每天发生不止一次,所以你需要这样的东西:
ID、日期、运动 ID
Id 将是主键,因为您可以拥有多对相同的 Day,ExerciseID。
我还快速浏览了您的架构,在我看来,您在那里有一个圆圈。我建议把桌子扔掉WorkoutMuscles
。锻炼是一组练习,这些练习实际上是在训练你的肌肉。例如,假设您在锻炼下添加了一个新练习,这意味着您还需要更新WorkoutMuscles
. 此外,我建议将WorkoutExercises
表重命名为Exercises
. 这些表应该被命名为它们的实体而不是它们所拥有的关系。
如果您想更轻松地检索信息,您可以创建视图。
推荐阅读
- javascript - Flexbox 和溢出
- r - 热图不会根据 Leaflet (R Shiny) 上的时间值而改变
- javascript - 如何根据填充项的 null 过滤数据
- amazon-web-services - 将 elasticbeanstalk 平台从 3.6 升级到 3.7 Linux 2
- postgresql - 如何通过本地运行的 psql 命令连接到在本地 Docker 容器中运行的 Postgres 数据库?
- webview - 为什么在超级应用程序中进行测试时,webview 会显示“不允许加载”错误?
- linux - 试图了解“StreamTrans #3”在 Firefox 中的作用?
- sql - PGSQL - 在 WHERE 子句中结合许多 AND + OR
- python - 用可变数量的项目注释元组并且第一项是不同类型的
- c# - ASP.NET Core 3.1 Razor 将字符串转换为日期时间