INTEGER 型の主キーに AUTOINCREMENT が設定されているとそうなります。
そういう主キーはテーブルのレコードを一意に識別するためだけのもので、それ以上でもそれ以下でもなく、連番にしようなどとはゆめゆめ思わないことをお勧めします。
連番が必要なら別の手段を考えた方が良さそうです。
とあるモデルのレコードを削除したり追加したりしていると抜け番が発生していて
これを直したいと思っています。
データベースの管理にはsqlite3を使っています。
そもそもの原因は何でしょうか。
レコードを削除したり追加したりしているとどうしても抜け番が発生するものなのでしょうか。
それとも私のモデル生成方法に問題があるのでしょうか。
class CreateNewLives < ActiveRecord::Migration[6.0]
def change
create_table :new_lives do |t|
t.string :name
t.integer :tika
t.integer :tian
t.integer :kyori
t.timestamps
end
end
end
自分で考えた解決方法としては
1,1から生成、または1つずつ編集
2,sql文を使ってsqlを操作し、解決
3,DB Browser for sqliteなどを使ってデータベースを編集、CSVファイル生成しそれを適応する。
1は自分の力でもなんとかなりそうですが、今回、こうして質問させて頂いているのは、
この問題の解決方法として、もっと一般的な、もっとスマートな方法があると、
確信し、それを身に着けておきたいからです。
ですのでこの方法はできれば取りたくないです。
2は例えばhttps://qiita.com/chokosuki4400/items/eb943b29e832ba315b9f
このページのような方法などを取るのが良いのかなと思いました。
3は例えばhttps://qiita.com/Ryuta1346/items/c21cb70b9879c66c8639
このようなページを参考にしようかと思いました。
この手の問題はよくあるようで調べるとたくさん解決方法が出てきましたが、
どれを取ればいいのか、分からず、どれも今一しっくりこなかったので、
今回、質問させて頂くに至りました。
他にもっといい案がありましたら、教えて頂きたいです。
また、私の方で足りない情報がありましたらご一報くださりますと、すぐ用意しますので、
仰っていただければ幸いです。
よろしくお願いします。
INTEGER 型の主キーに AUTOINCREMENT が設定されているとそうなります。
そういう主キーはテーブルのレコードを一意に識別するためだけのもので、それ以上でもそれ以下でもなく、連番にしようなどとはゆめゆめ思わないことをお勧めします。
連番が必要なら別の手段を考えた方が良さそうです。
@imperish
Questionerレコードを削除したり追加したりしているとどうしても抜け番が発生するものなのでしょうか。
このとおりです。
idの連番具合に依存しないプログラムを書いておけばOKです。
@imperish
Questioner書籍「SQLアンチパターン」の購入を強くオススメします。
このことについても詳しく取り上げている他、これにひっかかるエンジニアがおそらく引っかかるだろう他の問題についても記載されています。