削除された行の主キー値を再利用する主キー索引の設計を検討しています(最も極端な場合は数秒以内です)。この場合、これが最も効率的な設計です。プライマリキーの値を再利用するのが安全ではありませんか?
ただし、バグやセキュリティ上の欠陥の可能性があります。クライアントは削除されたレコードの古いキー値を引き続き持つことがあります。そのキーに対する要求は、別のユーザーと同じユーザーが所有する行を返すことがあります。アプリケーションがどれくらいうまく書かれているかに応じて、混乱が続く可能性があります。
これは決してセキュリティ上の欠陥ではありません。アプリケーションが他のユーザーが所有する行へのアクセスを許可する場合、アプリケーションはいかなる状況下でも間違っています。しかし、これは欠陥をより目に見えるようにするか、悪用しやすくします。大きな問題は、行が同じユーザーに属している可能性があり、アプリケーションが予期しない動作をする可能性があるということです。これは、クライアントが考える行ではないからです。
削除後に主キーの値が再利用されたときに増分される再利用カウンタを行に追加することで、1バイトのコストで少し軽減できます。私は主キーのその部分を作るでしょう。再利用カウンタが一致すると、誤って行にアクセスすることができました。256回の再利用で1回だけです。バグはまだ可能で、ユーザーが行にアクセスする必要がある場合は適切なチェックの代わりにはなりませんが、間違った行に誤ってアクセスすると、少なくともそれは敗北します。
思考?
これは一般的なSQLデータベースではなく、カスタムデータベース用ですが、原則は直交しています。
なぜプライマリキーを再使用して問題が発生する可能性があることを知っているのですか?ちょうど別の値を割り当ててください。整数を使用している場合、世界にはたくさんの整数があります。あなたはおそらく何らかの「圧縮」を望んでいますが、それは時期尚早の最適化を示唆しています。 –
主キーの目的は、レコードを一意に識別することです。あなたが鍵を再利用するとすぐに、あなたは前提全体を破壊しました。代わりにナチュラルキーの使用を検討することもできます。 – PhillipXT
メモリを節約し、はるかに効率的です。これは時期尚早の最適化ではありません。特定のテーブルにとって非常に重要な場合には、再利用されないセカンダリ・キーを常に追加することができますが、一般的なケースでは、再利用カウンタによって十分なものになると思います。 – Eloff