一尘不染

如何在mysql中存储顺序数据

sql

我得到了一些“ 锻炼程序” 内容,这些内容将按顺序显示给用户。下面显示了最简单形式的示例。

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

显而易见的问题是,当我们要在表 5中 添加一个练习时,比如说在 练习5 之后,然后在 5
之后手动添加它,然后必须手动更新以下所有练习的ID,以使它们按顺序排列。理想情况下,我们应该在表中添加一行,并 以某种方式
解释php代码,知道该练习应在 练习5 之后出现。

同样,例如,如果我们删除编号为17的练习,则xxx/exercise/17不会提供url中的内容。理想情况下,id =
18现在按顺序位于第17个位置,因此必须向其提供该内容。

尝试

我已经考虑过添加另一个列序列,该列序列将指示要使用的序列。但是,我又回到平方1了,因为我必须在添加/删除时更新序列号。

我还考虑过要创建另一个表并以我们想要提供内容的任何顺序存储ID号。-但是我不确定这是否是个好主意。


有人可以指导我解决这个问题的合适数据库/表设计吗?

编辑

我想我的问题还不清楚。
我不想重新填充/重新排序键。我知道那不是数据库的设计方式。
但是问题是,如果我在表的末尾添加内容,那么我如何告诉表/ php我想 在id = 15之后 提供新添加的内容(ID为127)
而不是最后一次提供。


阅读 373

收藏
2021-03-08

共1个答案

一尘不染

关于“我还考虑过创建另一个表并以我们想要提供内容的任何顺序存储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跳千斤顶。

这种方法使您可以拥有许多彼此独立的例程。

2021-03-08