Estamos trabajando en una aplicación web, aún no accesible para los usuarios. Mi jefe notó que los registros recién creados obtienen una identificación de más de 10 000, a pesar de que solo tenemos menos de 100 registros en la tabla. Ella asumió que la interfaz web por alguna razón crea más de 100 veces más registros temporales que los reales (y los elimina) y que esto puede llevarnos a quedar fuera de alcance dentro de unos pocos meses de su lanzamiento.
No creo que tenga razón sobre la causa de la inflación de la identificación (el colega que puede responder esto está de vacaciones, por lo que no lo sabemos con certeza), pero supongamos que sí. Ella dijo que odiaría usar una columna bigint, y que le gustaría que dejáramos de aumentar automáticamente la columna de ID y escribir el código del lado del servidor que elige el primer entero "no utilizado" y lo usa como ID.
Soy un estudiante graduado de ciencias de la computación con poca experiencia práctica, desempeñando un rol de desarrollador junior. Tiene años de experiencia en la gestión de todas las bases de datos de nuestra organización y en el diseño de la mayoría de ellas. Yo creo que ella es incorrecta en este caso, que un documento de identidad bigint hay nada que temer, y que imitan la funcionalidad DBMS olores de un anti patrón. Pero todavía no confío en mi juicio.
¿Cuáles son los argumentos a favor y en contra de cada posición? ¿Qué cosas malas pueden pasar si usamos un bigint, y cuáles son los peligros de reinventar la funcionalidad de autoincremento de la rueda ? ¿Hay una tercera solución que sea mejor que cualquiera? ¿Cuáles podrían ser sus razones para querer evitar una inflación de los valores nominales de identificación? También estoy interesado en conocer razones pragmáticas: ¿tal vez las ID de bigint funcionan en teoría, pero causan dolores de cabeza en la práctica?
No se espera que la aplicación maneje grandes cantidades de datos. Dudo que alcance los 10 000 registros reales en los próximos años.
Si hace alguna diferencia, estamos usando el servidor Microsoft SQL. La aplicación está escrita en C # y usa Linq to SQL.
Actualizar
Gracias, encontré interesantes las respuestas y comentarios existentes. Pero me temo que no entendiste mi pregunta, por lo que contienen lo que quería saber.
No estoy realmente preocupado por la verdadera razón de las altas ID. Si no podemos encontrarlo por nuestra cuenta, podría hacer una pregunta diferente. Lo que me interesa es entender el proceso de decisión en este caso. Para esto, suponga que la aplicación escribirá 1000 registros por día y luego eliminará 9999 de ellos . Estoy casi seguro de que este no es el caso, pero esto es lo que mi jefe creía cuando hizo su pedido. Entonces, en estas circunstancias hipotéticas, ¿cuáles serían las ventajas y desventajas de usar bigint o escribir nuestro propio código que asignará ID (de una manera que reutilice las ID de los registros ya eliminados, para garantizar que no haya vacíos)?
En cuanto a la razón real, sospecho fuertemente que esto se debe a que una vez escribimos código para importar datos de otra base de datos, como prueba de concepto de que una migración posterior se puede hacer en cierta medida. Creo que mi colega realmente creó varios miles de registros durante la importación y luego los eliminó. Tengo que confirmar si este fue realmente el caso, pero si es así, ni siquiera hay necesidad de acción.