我得到了一些“ 锻炼程序” 内容,这些内容将按顺序显示给用户。下面显示了最简单形式的示例。
ID名称持续时间已完成 ---------------------------------------- 1跳10 1 2运行15 0 3骑行12 0 4个俯卧撑30 1
通常,这些表至少要包含100行/练习,并且大约有300个表(针对不同标准的不同练习)。我们没有任何前端,可以直接使用 _dbForge Studio_数据库编辑器更新数据库。
以前的开发人员已经设计了表格,以便唯一ID列也可用作序列号。它也构成url的一部分。例如xxx / exercise / 12专门在数据库中查找id =12的实际第12行(他假设所有id均以1递增并且按顺序排列),而不是在数据库中查找id=12。
id=12
显而易见的问题是,当我们要在表 5中 添加一个练习时,比如说在 练习5 之后,然后在 5 之后手动添加它,然后必须手动更新以下所有练习的ID,以使它们按顺序排列。理想情况下,我们应该在表中添加一行,并 以某种方式 解释php代码,知道该练习应在 练习5 之后出现。
同样,例如,如果我们删除编号为17的练习,则xxx/exercise/17不会提供url中的内容。理想情况下,id = 18现在按顺序位于第17个位置,因此必须向其提供该内容。
xxx/exercise/17
尝试
我已经考虑过添加另一个列序列,该列序列将指示要使用的序列。但是,我又回到平方1了,因为我必须在添加/删除时更新序列号。
我还考虑过要创建另一个表并以我们想要提供内容的任何顺序存储ID号。-但是我不确定这是否是个好主意。
有人可以指导我解决这个问题的合适数据库/表设计吗?
编辑
我想我的问题还不清楚。 我不想重新填充/重新排序键。我知道那不是数据库的设计方式。 但是问题是,如果我在表的末尾添加内容,那么我如何告诉表/ php我想 在id = 15之后 提供新添加的内容(ID为127) , 而不是最后一次提供。
关于“我还考虑过创建另一个表并以我们想要提供内容的任何顺序存储ID号。-但我不确定这是否是一个好主意。”
这不是一个好主意,这是一个绝妙的主意。这是一个斯凯尔顿设计。它不是完美的,但是它会让您入门。
表格练习- ExerciseID,NameOfExercise,MeasuredIn,您可能需要的其他字段。NameOfExercise的样本值是上推式的(以重复测量),而RunningOnTheSpot的值(以秒为单位)。
表例程-RoutineId,NameOfRoutine和其他可能需要的字段。样本值包括Jane Fonda的例行程序,Navy Seal例行程序和Old Fart的例行程序。
最后,表ExerciseRoutine。这是许多可能的关系。一项运动不仅可以进行例行活动,而且一项例行活动可以进行多项运动。字段可以是ExerciseID,RoutineID,Sequence,MeasuredInMultipler和其他可能需要的字段。
这是一些示例数据。
ExerciseId, NameOfExercise, MeasuredIn 1 Push Ups repetitions 2 Running on the Spot seconds 3 Jumping Jacks repetitions RoutineId, NameOfRoutine 1 Jane Fonda 2 Navy Seal
最后
RoutineID, ExerciseID, Sequence, MeasuredInMultipler 1 2 1 60 1 3 2 10 2 1 1 500 2 3 2 100
因此,Jane Fonda例程在现场运行60秒,然后运行10个Jumping Jacks。同时,海军海豹突击队的常规训练是500俯卧撑,其次是100跳千斤顶。
这种方法使您可以拥有许多彼此独立的例程。