Oracle
 sql >> Database >  >> RDS >> Oracle

Cosa dovrei usare al posto della sequenza per evitare lacune?

Lo scopo principale delle sequenze è fornire una fonte di garantita identificatori univoci. Queste sono chiavi tecniche e in generale il loro valore effettivo dovrebbe essere irrilevante. Voglio dire, devi mostrare il numero della cartella all'utente?

Se sei così infastidito usa NOCACHE. Ciò ridurrà al minimo le lacune che stai vedendo e, fintanto che non crei cartelle molto spesso, non noterai il calo delle prestazioni dovuto alla mancata memorizzazione nella cache di una manciata di numeri. È ancora possibile ottenere lacune, se una transazione viene annullata o non riesce per qualsiasi altro motivo, ma dovrebbero essere rari; se non lo sono hai cose più grandi di cui preoccuparti della numerazione delle tue cartelle!

Altri modi per generare una serie a incremento monotono sono o complicati da implementare (trigger su tabelle di controllo del codice) o non garantiti per essere univoci (usando max(id)+1 in un trigger). Se desideri utilizzare una tabella di controllo del codice, ovvero una tabella che tiene traccia in modo specifico dell'ultimo ID cartella assegnato, dovresti dare un'occhiata a a risposta precedente ho scritto che dovrebbe come implementarne uno. L'unico vantaggio di una tabella di controllo del codice è che possiamo mantenere i conteggi con un gruppo. Quindi potresti avere una serie di ID cartella per ogni utente e incrementarli in modo indipendente.