sql >> Databáze >  >> RDS >> Oracle

Co bych měl použít místo sekvence, abych se vyhnul mezerám?

Hlavním účelem sekvencí je poskytnout zdroj zaručeného jedinečné identifikátory. Jedná se o technické klíče a jejich skutečná hodnota by obecně měla být irelevantní. Chci říct - potřebujete vůbec uživateli ukázat číslo složky?

Pokud vám to vadí, použijte NOCACHE. Tím se minimalizují mezery, které vidíte, a pokud nevytváříte složky příliš často, nevšimnete si snížení výkonu v důsledku neukládání nevyužité hrstky čísel do mezipaměti. Stále můžete získat mezery, pokud je transakce vrácena zpět nebo selže z jakéhokoli jiného důvodu, ale neměly by být časté; pokud tomu tak není, máte větší starosti, než je číslování vašich složek!

Jiné způsoby generování monotónně se zvyšující řady jsou buď těžkopádné při implementaci (spouštění přes řídicí tabulky kódu), nebo není zaručeno, že jsou jedinečné (pomocí max(id)+1 ve spoušti). Pokud chcete použít kontrolní tabulku kódu - to je tabulka, která konkrétně sleduje poslední přiřazené ID složky - měli byste se podívat na v předchozí odpovědi, kterou jsem napsal který by měl jak provést jeden. Jednou z výhod řídicí tabulky kódu je, že můžeme udržovat počty se skupinou. Takže byste mohli mít řadu ID složek pro každého uživatele a nezávisle je zvyšovat.



  1. PostgreSQL - zaokrouhlování čísel s pohyblivou řádovou čárkou

  2. Chyba TNS Listener

  3. Jak importovat výpis Oracle z instance ec2 do RDS v AWS

  4. Formátovat výsledky SQLite jako JSON