AUTONUMERICOS ACCESS

21- Autonuméricos

El siguiente articulo es una aportación de Medardo Santana, desde

Ciudad de La Habana, Cuba
Muchas Gracias Medardo !

El tema de los autonuméricos ha sido materia de discusión en los foros de programación. Sin embargo, las proyecciones han rondado prácticamente sobre las mismas ideas, puesto que este tipo de campo deja muy poco margen para manipularlo. Por ejemplo, los Autonuméricos:

- NO se pueden controlar.
- NO es accesible al usuario.
- NO se pueden modificar.
- NO se pueden cambiar.
- NO se pueden editar.
- NO se pueden actualizar.
- NO se puede recuperar el número si es eliminado, quedando huecos en la secuencia numérica.
- Todo esto puede traer problemas al migrar, replicar, dar mantenimiento, etc.

 

Sin embargo, pudiéramos mencionar otros apuntes que pueden resultar ventajas o desventajas respecto a los autonuméricos, según su uso:
- Es entero.
- No requiere que el usuario digite el valor. Genera un nuevo número secuencial o aleatorio exclusivo de manera automático para cada nuevo registro creado. Útil para llaves primarias o claves principales.
- Nos numera de forma única cada registro, por lo que nunca se repite, o sea, nunca existirán dos registros con el mismo valor (excepto si especifica lo contrario en la propiedad Indexado).
- Es un campo que nunca está vacío, por lo que nunca será nulo.
- Nos permite conocer el orden en que se han introducido los registros.
- Genera tres tipos de números: secuencial, aleatorio e Id. de réplica.
- Son considerados como clave principal o índice primario.
- Solo puede existir un campo de clave principal en cada tabla; sin embargo, sí puede existir una clave principal compuesta por más de un campo.
 

Como podemos apreciar, los autonuméricos tienen sus desventajas, pero también sus ventajas, todo depende del tipo de uso que se les vaya a dar.
 

Sin embargo, últimamente he podido apreciar criterios desproporcionados hacia el hecho de evitar los autonuméricos.
Muchos, asumen posiciones como: “con ese tipo de campos no podrás hacer nada”, “elimínalo y cámbialo a numérico”, “la solución idónea es olvidarse del autonumérico y generar el nuestro propio” y, finalmente, llegan a la idea de “crear una autonumeración sobre un campo numérico”. Para esto último, el ya clásico código:

= Nz(DMáx(“[MiCampo]”;”MiTabla”))+1
 

Por otra parte, hay quien considera que se usa de forma inadecuada (criterios con los que coincido):
- “debes usar un autonumérico para identificar inequívocamente un registro. No deben usarse como numerador secuencial en ningún caso.”
- “este tipo de campos se debería utilizar sólo para poder diferenciar registros en una tabla, y no como campos contadores.”
- “el propósito de los campos autonuméricos es para diferenciar de manera única a cada uno de los registros de una tabla.”
- “solo se debe usar cuando no encuentras otro campo en la tabla que pueda ser la clave principal.”
 

Existen muchos otros criterios sobre este particular, por lo que sería bastante difícil poderlos mostrar todos. Por tal motivo, quisiera hacer referencia solo a uno más, al del amigo Juan M Afán de Ribera, que resume todas esas opiniones:
 

“Debo puntualizar que el propósito de los campos autonuméricos es para diferenciar de manera única a cada uno de los registros de una tabla. Para ello, el campo autonumérico debería tener la casilla "Indexado" con el valor "Sí(Sin duplicados)".”
“Muchas veces los usuarios piensan que, tal vez por su nombre (Autonumérico), estos campos tienen como finalidad hacer las veces de campo contador. Pero aunque pueda parecer lo contrario, ese no es su cometido y el hecho de usarlos de esa manera traerá bastantes dolores de cabeza a quien lo intente.”
 

Mi criterio, muy particular, es que los autonuméricos (establecidos como incrementales), por naturaleza, son campos contadores; sin embargo, como bien se plantea en los criterios anteriores, no deben ser usados con ese fin. Por ejemplo, ¿qué pasaría si usted trata de obtener la cantidad de registros de una tabla haciendo referencia al valor autonumérico del último, después de haber eliminado uno o más registros? ¿Sería correcto ese valor? Por supuesto que no.
Cuando usted elimina un registro de una tabla donde se usa un campo autonumérico, el valor que se elimina no se recupera; por tanto, el valor del autonumérico del siguiente registro, no ocupa el valor del eliminado.
Este ha sido uno de los problemas más importantes, una de las causas fundamentales por el cual muchos se rehúsan en usar los autonuméricos.
 

Sobre los campos autonuméricos, se han tratado otros temas como: crear, agregar, configurar, resetear, incrementar según intervalo, etc, etc, así como algunas funciones interesantes donde se utilizan este tipo de datos, y donde (no sería justo si no lo mencionara) podemos encontrarlos en la página de Emilio:
https://www.mvp-access.es/emilio/Access/Autonumericos.asp 
 

Por último, la problemática de eliminar un autonumérico y no recuperar su número, me ha llevado a buscar una alternativa para, al menos, aliviar y comenzar a discutir y analizar la posibilidad de poder eliminar un registro con un campo autonumérico, recuperando su número y que éste sea ocupado por el siguiente y, así, con los restantes.
 

Con este fin, les propongo los enlaces donde aparecen los trabajos que he realizado al respecto:
 
 

Enlaces sobre los procedimientos relacionados con autonuméricos
 
Existen cuatro procedimientos que he realizado respecto a Autonuméricos:
 
Primero: Dos que tratan de cómo recuperar el número consecutivo del autonumérico después de haber perdido la consecutividad del autonumérico por eliminación de registro(s) u otra causa; uno para casos de tablas sin relaciones y, el otro, para casos de tablas con relaciones.
 

Para recuperar autonumérico de uno o más registros:
 
Recuperar Autonumérico Sin Relación
https://www.mvp-access.com/foro/forum_posts.asp?TID=43089

Nombre de la BD con el ejemplo a descargar:
RecuperarAutonuméricoSinRelacion
 

Recuperar Autonumérico Con Relación
https://www.mvp-access.com/foro/forum_posts.asp?TID=43090

Nombre de la BD con el ejemplo a descargar:
RecuperarAutonuméricoConRelacion


 
Segundo: Dos que tratan de cómo recuperar el número consecutivo del autonumérico inmediatamente después de eliminar un registro (dentro del mismo procedimiento); uno para casos de tablas sin relaciones y, el otro, para casos de tablas con relaciones.
 

Para recuperar autonumérico inmediatamente después de eliminar un registro:
 
Eliminar y Recuperar Autonumérico sin Relaciones
https://www.mvp-access.com/foro/forum_posts.asp?TID=43125

Nombre de la BD con el ejemplo a descargar:
ElimRecupAutonumérico_UnaTabla
 

Eliminar y Recuperar Autonumérico con Relaciones
https://www.mvp-access.com/foro/forum_posts.asp?TID=43055

Nombre de la BD con el ejemplo a descargar:
ElimRecupAutonum_TablasRelacionadas
 

Los link para bajar las bases de datos con los ejemplos, están en cada página. No obstante, aquí:
https://groups.google.es/group/mvp-access-archivos/files?hl=es


Los procedimientos “Sin relaciones”, no deben tener ningún contratiempo, puesto que tratan de tablas sin relaciones. Aquellos “Con Relaciones”, tienen sus limitaciones; están basados en una tabla principal relacionada, de forma lineal, con otras tablas. De modo que, las tablas secundarias, no tienen relación con otras. Así como que, los autonuméricos utilizados como clave principal, están establecidos en su propiedad Indexado, en todos los casos, como “Sí (Sin duplicados)”. Pero, para empezar, creo que vale la pena.
 
Mi propósito con todo esto, amigos míos, es, por una parte, sugerirles ver, probar y analizar estos procedimientos y conocer sus criterios para, por otra parte, comenzar una vasta discusión sobre el “uso de los autonuméricos”, y así mejorar y ganar en experiencia.
He realizado mis investigaciones y no he encontrado nada completo al respecto. Aún existiéndolo, no hay nada mejor que una discusión donde se refleje la experiencia de cada uno. Y defiendo la idea de que, no hay mejor lugar que este foro.
 

 

[Atrás]