Cita: Conozco una forma de hacerlo que es por medio de secuencias pero el inconveniente es que si llego a borrar un registro, pues se perderia el consecutivo.
Partamos de una base: El sentido de
un valor incremental es la creación de una
PK, y en ese sentido, es
lógico,
esperable y
necesario que si eliminas un registro, la secuencia
tenga saltos.
La pregunta central aquí es
¿para qué quieres conservar la secuencia incremental?
Entendamos lo siguiente, cuando hablamos de
PK: Una PK basada en un campo numérico incremental no se debe renumerar por cuestiones estéticas, ya que debes tener en cuenta que:
1. No es conveniente "reorganizar" un índice autoincremental porque en esencia
es una tarea sin funcionalidad, carente de practicidad y consumidora innecesaria de tiempo de proceso.
2. El renumerar las PRIMARY KEY de un campo incremental
no produce ninguna mejora en la optimización de consultas, por lo que hacerlo solamente resulta en tiempo de PC consumido.
3. Renumerar un campo autoincremental,
genera un nuevo ordenamiento FISICO de los datos (una PK genera un índice tipo clúster), con la consiguiente sobrecarga del microprocesador, porque tiene que reescribir físicamente la tabla cada vez y reconstruir el índice completamente.
4.
Tampoco es recomendable bajo ninguna circunstancia renumerar una PK (es el caso, por ejemplo, en MySQL donde un AUTOINCREMENT es PK por default)
si se usa como FK de otras tablas, porque
generará inconsistencia de datos entre registros de tablas relacionadas.
5.
No se recomienda renumerar si existen datos históricos de otras transacciones, que hacen referencia a otros registros que tenían el mismo número. De hecho, en una tabla de stock, las ID jamás cambian porque el hecho que un producto ya no exista ni se fabrique
no quiere decir que no aparezca en registros más antiguos. Pisar un ID sería lo mismo que
ponerle a un recién nacido el número de documento de un muerto.
6. Por otro lado, ¿qué te importa que tengas espacios de números que ya no usas, en tanto la numeración sea secuencial e incremental? ¿para qué perder tiempo en
renumerar?, ¿para que quede más
lindo? . Eso lo puedes hacer perfectamente en la interfase, donde
visualizas la tabla de datos, o bien usando ciertas formas de consulta que te permitan un "orden" numérico transitorio que no afecta las tablas.
7. Si tu temor es quedarte sin números para usar, un ID generado en un campo numérico tiene como rango límite:
18.446.744.073.709.551.615 Si y sólo si no se cumple el supuesto de ser usado como PK, parte de la PK o ser FK, tiene algún sentido mantener la continuidad de la numeración. Pero no es la mayoría de los casos.