Yo te sugiero lo tener la siguiente estructura :
una tabla de FACTURAS (por ejemplo) con los campos :
FACTURA INTEGER NOT NULL
NUMFACTURA INTEGER NOT NULL
Creas la clave primaria usando el fichero FACTURA
Define un UNIQUE para el Campo NUMFACTURA
Creas dos generadores uno cada para campo
El generador del campo FACTURA lo usas desde la aplicacion, para asignarle un valor.
Pero el generador para NUMFACTURA usalo en el Trigger de la tabla BEFOREINSERT y ahi le introduces el NUMFACTURA.
Y justamente es ahi donde podrias comprobar si hay huecos o asignarle un valor nuevo desde el generador. De esa manera te aseguras que no habra huecos entre registros y los huecos que habra solo sera a nivel del campo usado como clave primaria.
Yo en caso de mantenimentos de FACTURAS con cabecera y detalle lo que hago es generar el campo NUMFACTURA en el Trigger BEFOREUPDATE atraves de un campo de control (Booleano) para indicar cuando quiero que realmente me genere el numero de factura (NUMFACTURA).
De esta manera puedo grabar la cabecera para introducir lineas de detalle, sin problemas de FOREIGNKEY's y cuando finalmente el usuario da por hecha la factura (BOTON OK,je je ), justamente es ese momento cuando se genera el NUMFACTURA.
En un sistema multiusuario me asegura la continuidad de numeracion y no se perderan numeraciones si un usuario cancela (BOTON CANCEL, jeje) despues de haber tenido que grabar la cabecera y algunas lineas en el proceso de "añadir una factura nueva".
Vaya rollo solte!!!! jejejeje
No se hasta me ha parecido bonito asi tan bien explicado, espero que parezca bonito e interesante, sino puee naa!!
Espero que te sirva y saludos a todos !!!!!!