Como armazenar dados seqüenciais em mysql

Recebi algum conteúdo de Exercício de rotina que deve ser mostrado seqüencialmente para o usuário. Um exemplo na forma mais simples é mostrado abaixo.

 A duração do nome do ID foi completada
 ----------------------------------------
 1 salto 10 1
 2 correndo 15 0
 3 ciclismo 12 0
 4 flexões 30 1

Normalmente, as tabelas são mínimas de 100 linhas / exercícios e existem cerca de 300 tabelas (diferentes exercícios para diferentes critérios). Não temos nenhum front-end e atualizamos o database diretamente usando o editor dbForge Studio db.

O desenvolvedor anterior desenhou a tabela de modo que a coluna de identificação única também serve como número de seqüência. Também faz parte da url. Por exemplo, xxx / exercise / 12 procura especificamente a 12ª linha real com id = 12 (ele assumiu que todos os IDs estão aumentando com 1 e estão em sequência) no database, em vez de fila com id=12 .

O problema óbvio com isso é quando queremos adicionar um exercício à tabela, digamos depois do exercício 5, depois adicionamos manualmente após 5, E ENTÃO, atualizemos manualmente os ID para todos os exercícios a seguir, de modo que estejam em sequência. Idealmente, devemos apenas adicionar uma linha na tabela e de alguma forma explicar o código php saber que esse exercício deve aparecer após o exercício 5 .

Da mesma forma, por exemplo, se excluirmos um exercício no número 17, então, do url xxx/exercise/17 o conteúdo não será servido. Idealmente, id = 18 está agora na mancha 17 em seqüência, por isso deve ser servido esse conteúdo.

tentativas

Eu pensei em adicionar outra seqüência de coluna que irá dizer em que seqüência para servir. Mas, novamente, volto para o quadrado 1, porque eu vou ter que atualizar os números de seqüência após adicionar / excluir.

Eu também pensei em criar outra tabela e armazenar números de identificação em qualquer sequência que desejemos para servir o conteúdo. – Mas não tenho certeza se esta é realmente uma boa idéia.


Alguém pode me guiar com um projeto adequado de database / tabela para esse problema?

EDITAR

Acho que não estive claro na minha pergunta.
Não quero reabastecer / reordenar as chaves. Estou ciente de que não é como os DBs devem ser projetados.
MAS O problema é Se eu adiciono um conteúdo no final da tabela, então, como posso dizer a tabela / php que eu quero servir o conteúdo recém-adicionado (com id digamos 127) depois de id = 15 em vez de servi-lo por último.

No que diz respeito, “eu também pensei em criar outra tabela e armazenar números de identificação em qualquer sequência que desejássemos para servir o conteúdo. – Mas não tenho certeza se esta é realmente uma boa idéia”.

Não é uma boa ideia, é uma ideia maravilhosa. Aqui está um design skelton. Não é perfeito, mas você irá começar.

Exercício de tabela – ExerciseID, NameOfExercise, MeasuredIn, outros campos que você deseja,. Os valores de exemplo de NameOfExercise são push-up, medição em repetições e RunningOnTheSpot, medido em segundos.

Routine de tabela – RoutineId, NameOfRoutine, outros campos que você deseja. Os valores das amostras são: a rotina de Jane Fonda, a rotina do selo da marinha e a rotina do Old Fart.

Finalmente, tabela ExerciseRoutine. Esta é uma relação entre muitos. Um exercício pode ser mais do que rotina e uma rotina pode ter mais de um exercício. Os campos seriam, ExerciseID, RoutineID, Sequence, MeasuredInMultipler e outros campos que você deseja.

Aqui estão alguns dados de amostra.

 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 

e finalmente

  RoutineID, ExerciseID, Sequence, MeasuredInMultipler 1 2 1 60 1 3 2 10 2 1 1 500 2 3 2 100 

Então, a rotina de Jane Fonda está sendo executada no local por 60 segundos, seguido de 10 Jumping Jacks. Enquanto isso, a rotina do selo da marinha é de 500 puxadores de pressão seguido de 100 jarros de salto

Essa abordagem permite que você tenha muitas rotinas, todas independentes umas das outras.

Como deixar os ID atuais como estão, deixá-los permanecer como ids e trabalhar em seus URIs. Faça uma nova coluna para classificar. Em vez de incrementar esses valores em 1, você pode incrementar 5, 10 ou 100 para cada linha consecutiva. Isso permite que você insira novas linhas entre as existentes, sem modificar os dados anteriores.

Você pode adicionar uma coluna de sorting e, em seguida, inserir ou excluir executar uma declaração de atualização adicional para corrigir a coluna de sorting. Se você realmente quisesse que você pudesse olhar para os gatilhos do MySQL para executar a atualização