Yo no uso FB, mas bien MYSQL pero supongo que es el mismo principio ya que no conozco bien los generadores de FB. En MySQL usamos un campo autoincrementado para llevar el control de las claves del registro maestro de manera que un pseudocódigo sería esto:
Código:
Abrimos la transaccion;
Try
Poner la tabla maestra en mode insercion;
Llenamos los datos de la maestra;
Agregamos las filas que requiéramos en nuestra tabla detalle dejando en blanco con un valor conocido el campo que lo ligará a la maestra (yo uso -1 por ejemplo)
Guardamos la maestra;
Obtenemos el campo autoincrementado que se asignó al registro maestro;
Sustituimos el campo correspondiente con ese valor en nuestras filas de detalle (que aun no se han guardado)
Guardamos la tabla detalle (post);
Aplicamos los cambios (commit)
Except
Hacemos un rollback si ocurre cualquier error
end;
Al menos en MySQL el valor del campo autoincrementado es único por cada conexión y por cada transacción, de manera que nunca se repiten, lo más que llega a pasar es que ocurra un error y la transaccion se aborte por lo que el valor utilizado se pierde pero se garantiza que no lo obtenga cualquier otra conexión. Si no te preocupa dejar huecos en las claves primarias, es una buena solución y bastante sencilla.
En FB supongo que el generador hace lo mismo que el campo autoincrementado, ahí los expertos nos dirán.