Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Was sollte ich anstelle von Sequenz verwenden, um Lücken zu vermeiden?

Der Hauptzweck von Sequenzen besteht darin, eine garantierte Quelle bereitzustellen eindeutige Kennungen. Dies sind technische Schlüssel und im Allgemeinen sollte ihr tatsächlicher Wert irrelevant sein. Ich meine - müssen Sie dem Benutzer überhaupt die Ordnernummer zeigen?

Wenn Sie das stört, verwenden Sie NOCACHE. Dadurch werden die Lücken minimiert, die Sie sehen, und solange Sie nicht sehr oft Ordner erstellen, werden Sie die Leistungseinbußen nicht bemerken, wenn Sie eine Handvoll schwacher Zahlen nicht zwischenspeichern. Sie können immer noch Lücken bekommen, wenn eine Transaktion zurückgesetzt wird oder aus anderen Gründen fehlschlägt, aber sie sollten selten sein; wenn nicht, haben Sie größere Sorgen als die Nummerierung Ihrer Ordner!

Andere Möglichkeiten zum Generieren einer monoton steigenden Reihe sind entweder umständlich zu implementieren (Trigger über Codesteuertabellen) oder nicht garantiert eindeutig (mit max(id)+1). in einem Auslöser). Wenn Sie eine Code-Kontrolltabelle verwenden möchten - das ist eine Tabelle, die speziell die zuletzt zugewiesene Ordner-ID verfolgt - sollten Sie einen Blick auf bei einer früheren Antwort, die ich geschrieben habe was sollte man umsetzen. Der einzige Vorteil einer Codesteuertabelle besteht darin, dass wir Zählungen mit einer Gruppe verwalten können. Sie könnten also eine Reihe von Ordner-IDs für jeden Benutzer haben und diese unabhängig erhöhen.