• ベストアンサー

idがばらばらなのを直したいのですが・・・

こんばんは。 PHPとMySQLをつかって簡単な地図サイトを作っています。 テーブルとしては、 id,name,category,lat,lng などで作っているのですが、「登録」「削除」をしているうちに、idが3,5,8 などばらばらになってしまいました。 (はじめは1,2,3,4 と連番になるようにしていたのですが、削除をしたため、抜けてしまっている状態です) これはそのまま放っておいてものちのち問題はないのでしょうか? できれば、きれいに1,2,3,4と揃えられればいいなあと思っています。 ご意見いただけると嬉しいです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

そのidとは何の意味を持つかにもよります たんにPKとして使っており、idそのものに意味を持っていないのであれば、連番に振りなおしても問題は無いとは思いますが、会員IDだったり商品IDだった場合は、振りなおした後に過去のIDと現在のIDが違うことになりますのでシステム仕様上の不都合が発生します。 そのidを使って他のテーブルとリレーション(紐付け)をしている場合はむやみに連番に振りなおさないほうが良いです 考えうる最大値を想定してテーブル設計しておけば、idを使いまくって枯渇するなんてことないですよ そのidを使い、何かしらの情報を引き出すのであれば 例えば、 sample.jp/map.php?id=5 などのようにアクセスさせた場合の情報を表示させているのに使っているのであれば、 もし、そのページをブックマークに登録している人には、新しく振りなおしたidの情報が表示されますが、それはあなたの作っているシステムの仕様上許される設計なのでしょうか? 一般的なシステムでは、idを削除した場合は 欠番扱いにするのが多いようです。 欠番にしておいて、 「該当する情報がありません」 等の画面を出力させるほうが良いかと思います。 振りなおしを前提とした場合、 もし、idに紐付いた別テーブルがあるのであれば、 MySQLにFK設定してON UPDATE CASCADEとON DELETE CASCADEにしておけば変更してもデータの整合性は維持できます。 あ、それと、もうひとつ 新しいレコードをINSERTするときに、間違っても MAX+1等のようにしてはいけませんよ MySQLならばidの属性にAUTO_INCREMENT付ければINSERTするたびに自動で連番で振ってくれます ただし、削除すれば欠番のままです。

makoto_ty
質問者

お礼

ご丁寧にありがとうございます! 非常によく分かりました。 私の場合、 sample.jp/map.php?id=5 のように、idを使っていました。 振りなおさない方がいいですね。 ずっと疑問だったのが解消されました。 本当にありがとうございました!

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

IDはauto_incrementで付番しますが、削除後のIDが空きになるのは気にしたことがありませんね。あくまでも「内部的なもの」としか思ってません。 他のテーブルとの影響がなければ、エクスポート→インポートなどで付け直してもいいんでしょうけど。一時的に揃えてもすぐにまた空きが出来てしまったりするので、気にしても仕方ないと割り切ってます。

makoto_ty
質問者

お礼

回答ありがとうございます。 なんとなく、気持ちが悪いと思った次第です。 また、データが多くなってくるとデータベースの動きも悪くなってくるらしいと本などで読んでいました。 その時に、きれいに揃えることで動き自体もよくすることが出来るのかなあと思っていました。。。(パソコンでいうデフラグのイメージです。) 他のテーブルと影響がありそうですので、気にしないことにします。 どうもありがとうございました。

関連するQ&A