Durante una de las últimas lecciones en la universidad (soy estudiante), el profesor nos pidió que desarrollemos una base de datos (MySQL Server si es importante) y una pequeña aplicación cliente que consumiría la base de datos como fuente de datos.
Uno de los requisitos era que la columna de identidad (que es el PK en cada tabla) debe ser secuencial, porque es una buena práctica (según las palabras del profesor). Es decir, cuando se elimina la fila de la tabla, su PK debe reutilizarse en inserciones posteriores. Tengo un conocimiento promedio en RDBMS, PK y columnas de identidad. Por lo que entiendo, esa columna de identidad es solo una forma de permitir que DB genere PK automáticamente al insertar filas y nada más. Y el valor de la columna de identidad no debe estar relacionado con los atributos de fila de ninguna manera (siempre que no sea una clave natural).
Este requisito (columna de identidad estrictamente secuencial) me resultó sospechoso. Intenté preguntarle al profesor qué está mal si la identidad no es secuencial (con huecos causados por eliminaciones), pero obtuve una respuesta muy abstracta como "es conveniente para los usuarios y útil para los administradores de bases de datos que mantienen la base de datos". No hay ejemplos específicos. El argumento "conveniente para los usuarios" suena tonto, porque no tiene ningún significado en el dominio empresarial.
Por lo tanto, tengo curiosidad si estas razones son reales? Solo puedo pensar en un caso en el que se requiere la reinicialización de la columna de identidad, cuando se agota el espacio de identidad. Pero esto es más un problema de diseño cuando el tipo de columna de identidad se eligió incorrectamente, digamos simple en int
lugar de bigint
o uniqueidentifier
cuando la tabla contiene mil millones de filas. Supongamos que una columna de identidad es un índice agrupado: ¿pueden las brechas en la columna de identidad afectar el rendimiento del índice? ¿Quizás hay otras razones del mundo real para la reinicialización automática de la columna de identidad después de cada eliminación que desconozco?
¡Gracias por adelantado!