我已经获得了一些练习例程内容,这些内容将按顺序显示给用户。最简单形式的示例如下所示。
id name duration completed ---------------------------------------- 1 jumping 10 1 2 running 15 0 3 cycling 12 0 4 push ups 30 1
通常表格最少100行/练习,大约有300个表格(不同标准的不同练习)。我们没有任何前端和使用 dbForge Studio db编辑器直接更新数据库。
之前的开发人员设计了表格,以便唯一的id列也可以作为序列号。它也是网址的一部分。例如。 xxx / exercise / 12专门在数据库中查找id为12的实际第12行(他假设所有id都以1递增并且按顺序递增)而不是id=12
行。
显而易见的问题是,当我们想要在表格中添加练习时,可以在练习5 之后说出,然后我们在5之后手动添加它,然后必须手动更新所有以下内容的ID练习,以便它们按顺序进行。理想情况下,我们应该在表格中添加一行, 以某种方式 解释php代码,知道此练习应该在练习5 之后出现。
同样,例如,如果我们删除了第17号的练习,那么从网址xxx/exercise/17
开始,内容将不会被提供。理想情况下,id = 18现在按顺序排在第17位,因此必须提供该内容。
尝试
我想过添加另一个列序列,它会告诉我们服务的序列。但是我又回到了方阵1,因为我必须在添加/删除时更新序列号。
我还想过创建另一个表并以我们想要提供内容的任何顺序存储id号。 - 但我不确定这实际上是不是一个好主意。
有人可以为我提供合适的数据库/表设计来解决这个问题吗?
修改
我想我的问题并不清楚。
我不想重新填充/重新排序密钥。我知道不应该如何设计DB。
但问题是如果我在表的末尾添加一个内容,那么如何告诉table / php我想要提供新添加的内容(id允许说127)在id = 15之后而不是最后服务。
答案 0 :(得分:2)
关于,“我还想过创建另一个表并按照我们想要提供内容的任何顺序存储id号。 - 但我不确定这是否真的是一个好主意。”
这不是一个好主意,这是个好主意。这是一个skelton设计。它并不完美,但它会让你开始。
表练习 - ExerciseID,NameOfExercise,MeasuredIn,您可能需要的其他字段,。 NameOfExercise的样本值是俯卧撑,重复测量和RunningOnTheSpot,以秒为单位测量。
表例程 - RoutineId,NameOfRoutine,您可能需要的其他字段。样本值包括Jane Fonda的Routine,Navy Seal Routine和Old Fart的Routine。
最后,表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次跳跃
这种方法允许你有许多例程,彼此独立。
答案 1 :(得分:0)
如何保持当前的ID不变,让它们作为ID保留并在URI中工作。创建一个新列进行排序。您可以为每个连续的行增加5,10或100,而不是将这些值递增1。这允许您在现有的行之间插入新行而不修改以前的数据。
答案 2 :(得分:0)
您可以添加排序列,然后在插入或删除时执行其他更新语句以更正排序列。如果您真的想要,可以查看MySQL triggers来执行更新