Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

~TiuTalk~

Reoganizando tabela relacional

Recommended Posts

Fala gente :)

 

Tenho uma tabela relacional com três campos:

 

id int(11) AUTO_INCREMENT (PRIMARY_KEY)

categoria_id int(11)

pacote_id int(11)

 

E suponhamos que eu tenha três registros nelas com IDs iguais a 3, 8, e 9..

 

Eu preciso reorganizar esses IDs para o menor valor possível... voltando a ser 1, 2 e 3.

 

Existe uma forma de fazer isso?

 

Ps.: Eu não preciso me preocupar em manter a ordem dos registros ou o valor atual dos IDs.

 

Só pra ilustrar com outro exemplo, suponto que eu tenha uma tabela assim (o primeiro valor é a coluna ID):

 

2, TiuTalk, blablabla

4, Fulano, lalala

10, Ciclano, tralalá

 

Queria que ela ficasse assim:

 

1, TiuTalk, blablabla

2, Fulano, lalala

3, Ciclano, tralalá

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

me diz uma coisa, isso é uma tabela de relacionamento?

 

pq você precisa que os valores sejam "diminuídos"?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim... é uma tabela de relacionamento entre duas outras tabelas...

 

Eu preciso que eles sejam diminuidos pq o campo é INT(11), eu sei q posso aumentar o número máximo de caracteres, mas sei que cedo ou tarde eu vou chegar no limite já que quase todos os registros são re-inseridos com REPLACE INTO todo dia e tão crescendo absurdamente.

 

Pode só ser uma preocupação boba, mas queria saber como fazer, mesmo que eu não o faça. :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao..

 

até aonde vai meu conhecimento...

você teria que criar essa tabela de relacionamento, sem essa PK de auto incremento..

e com uma PK composta com os dois campos...

mais ou menos assim:

 

CREATE TABLE `rel_categoria_pacote` (
  `categoria_id` INT UNSIGNED NOT NULL,
  `pacote_id` INT UNSIGNED NOT NULL,
  PRIMARY KEY (`categoria_id`, `pacote_id`)
)
ENGINE = InnoDB;

e com suas devidas FKs.

 

Teoricamente, dessa forma, você não precisa se preocupar com o valor do auto incremento que estava se preocupando antes,

a tabela será um pouco menor e está garantindo a integridade dos dados, já que a chave primária composta garante que não haverá relacionamentos duplicados entre pacores e categorias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

~Til Talk~

11 permite indexar até 99.999.999 que não é pouca coisa.Precisa mesmo não ter "banguelas" ?

 

Recriar estas tabelas vai dar trabalho, acho que talvez seja melhor :

 

1) Ver pq se está perdendo as faixa de valores e se possível corrigir

 

2) Pensar uma rotina que aproveitasse as "banguelas" , caso seja possível pois pode haver problemas de datas x registros.

Assim ao se inserir um novo registro o '1' poderia ser aproveitado usando o seu exemplo.

 

 

Mas caso queira reindexar o algoritmo básico é (grosso modo)

 

Desligar todas as pk´s fk´s e uk´s que envolvam este campo

Enquanto houver "banguelas" faça

__Obter o registro mais baixo não migrado

__Verificar se existe registro mais baixo que ele livre

__Alterar este registro em todas as tabelas envolvidas.

Fim enquanto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmm.. Interessantíssimo!

 

A tabela precisa ser InnoDB pra poder fazer uma PK "dupla"? Ou rolatira também com MyISAM? :D

 

A PK Composta funciona em tabelas do tipo MyISAM também, eu sugeri InnoDB por causa das FKS =]

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.