Wird der Wert nicht vom
DBMS automatisch erzeugt oder soll das wirklich deine Anwendung machen?
Ich kenne Firebird jetzt nicht, aber wie verlässlich ist das denn, sich den Schlüssel im Vorab zu holen und darauf zu hoffen, dass in der Zwischenzeit niemand anderes einfügt und diesen Wert schon "verbraucht"?
Wenn ich mir mit 'ner Sequenz einen Wert hole, dann ist er vergeben. Für immer.
Es ist dabei dann egal, ob ich ihn heute oder morgen oder nächstes Jahr in die Datenbank schreibe, vergeben ist vergeben. Das Einzige, was zwingend ist: Jeder, alle ... wie auch immer...
müssen sich den Wert über die Sequenz holen.
Und wenn ich mir einen Wert hole und diesen dann nicht nutze, dann ist in der Tabelle für diesen Wert halt eine Lücke, die nie wieder aufgefüllt werden wird.
Eine Sequenz liefert bei jedem Zugriff einen neuen Wert, unabhängig davon, ob irgendeiner der vorher erzeugten Werte jemals genutzt wurde.
Wenn natürlich irgendwer einfach so irgendwelche Werte nutzt, die er sich selbst erfindet, so kann es zu doppelten Werten kommen, das heißt aber auch:
Da hat jemand nicht regelkonform mit der Datenbank gearbeitet.
Über eine Sequenz ist eine doppelte Vergabe eines Wertes nicht möglich, von daher kann es die Situation:
aber wie verlässlich ist das denn, sich den Schlüssel im Vorab zu holen und darauf zu hoffen, dass in der Zwischenzeit niemand anderes einfügt und diesen Wert schon "verbraucht"? nicht geben.
Ähnlich wie bei einer
GUID. Die ist (per Definition) eindeutig, wenn Du sie nutzt, dann schön, wenn nicht, wird niemand mehr diese
GUID (zufällig) erzeugen und verwenden können.