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: http://www.mvp-access.es/emilio/Access/Autonumericos.asp
|