大学(私は学生です)での最後のレッスンの1つで、講師から、データベース(必要に応じてMySQLサーバー)と、データベースをデータソースとして使用する小さなクライアントアプリを開発するように依頼されました。
要件の1つは、ID列(すべてのテーブルのPK)が連続している必要があることです。つまり、テーブル行が削除された場合、そのPKは後続の挿入で再利用する必要があります。RDBMS、PK、およびID列に関する平均的な知識があります。私が理解していることから、そのID列は、行を挿入するときにDBがPKを自動生成できるようにするための手段にすぎません。また、ID列の値は、(自然キーではない限り)行属性とは一切関係しません。
この要件(厳密に連続したID列)は私には不審でした。IDがシーケンシャルでない(削除によるギャップがある)場合、何が悪いのかを講師に尋ねてみましたが、「ユーザーにとっては便利であり、データベースを保守するDB管理者にとっては便利」という非常に抽象的な回答を得ました。具体的な例はありません。「ユーザーにとって便利」という議論は、ビジネスドメインでは何の意味もないため、ばかげているように思われます。
したがって、これらの理由が本当かどうか知りたいのですが。ID列を再シードする必要がある場合、つまりIDスペースが使い果たされた場合の1つだけを考えることができます。ただし、これは、ID列のタイプが誤って選択された場合int
、bigint
つまりuniqueidentifier
テーブルに10億行が含まれている代わりに、または単純である場合に、より設計上の問題になります。ID列がクラスター化インデックスであるとします。ID列のギャップがインデックスのパフォーマンスに影響を与える可能性はありますか?多分私が知らない削除ごとに自動ID列が再シードされる実際の理由は他にもありますか?
前もって感謝します!