如何在mysql中存储顺序数据

时间:2014-05-05 01:36:31

标签: php mysql sql database database-design

我已经获得了一些练习例程内容,这些内容将按顺序显示给用户。最简单形式的示例如下所示。

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之后而不是最后服务。

3 个答案:

答案 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来执行更新