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.