sql >> データベース >  >> RDS >> Oracle

ギャップを回避するために、シーケンスの代わりに何を使用する必要がありますか?

    シーケンスの主な目的は、保証のソースを提供することです。 一意の識別子。これらは技術的な鍵であり、一般的に言えば、それらの実際の値は無関係であるはずです。つまり、フォルダ番号をユーザーに表示する必要がありますか?

    気になる場合は、NOCACHEを使用してください。これにより、表示されるギャップが最小限に抑えられます。また、フォルダーを頻繁に作成しない限り、少数の数値をキャッシュしないことによるパフォーマンスの低下に気付くことはありません。トランザクションがロールバックされたり、その他の理由で失敗したりした場合でも、ギャップが発生する可能性がありますが、頻度は低いはずです。そうでない場合は、フォルダの番号付けよりも大きな心配事があります!

    単調に増分する系列を生成する他の方法は、実装が面倒であるか(コード制御テーブルをトリガーする)、一意であることが保証されていない(max(id)+1を使用)。 トリガーで)。コード制御テーブル(最後に割り当てられたフォルダーIDを具体的に追跡するテーブル)を使用する場合は、以前の回答で私が書いた どのように実装する必要があります。コード制御テーブルの利点の1つは、グループでカウントを維持できることです。したがって、ユーザーごとにフォルダIDを実行し、それらを個別にインクリメントすることができます。



    1. 別のテーブルからのMYSQLの順序

    2. #1115-不明な文字セット:'utf8mb4'

    3. COVID-19パンデミックと戦うための無料の野戦病院データベース

    4. 'CREATE'またはその近くでのplpgsqlCREATEFUNCTION構文エラー