アラフォーがお金持ちになるためエンジニア目指すブログ

お金も根性も学歴もないアラフォーまきのがエンジニアになってお金持ち目指すよ!

【Railsメモ】DB系のメモ

どうも、アラフォーまきのです。
メモが溜まってるー!
今回はDB関係。

development.sqlite3ファイル

  • DBの中のデーターが書かれているファイル。
  • 削除すると当然データーがなくなる。DB空っぽになる。
  • 削除後にrails db:migrateすれば、新たにdevelopment.sqlite3ファイルが作られる。
  • 当然中身空っぽの新品のテーブル。
  • アプリによるけれど、もしSQLite3のアプリを開けてるなら、ファイルオープンし直さないと、削除したファイルを見ている状態のままの場合がある。
  • ファイル名をdevelopment.sqlite3から変更することもできる。
  • ファイル名を変えた時は、development.sqlite3を読み込んでいるapp/config/database.ymlの中のファイル名も直さないと、読み込み対象が見つからない状態になるので注意。
development:
  <<: *default
  database: db/development.sqlite3  #ここ

マイグレーションファイルの扱い

  • DBはソースコードではないから、現状に合わせていくのが結構大変らしい。
  • たくさんの紐付けができている場合、下手にマイグレーションファイルの中身を書き換えると、紐付けしている方も直さねばならない。
  • マイグレーションファイルは、できた順番通りにやればちゃんとテーブルが出来上がるようになっている。
  • 中身をいじるようなやり方をすると、元々の内容とは異なる動きがはいるので、その次のファイルに繋がらずに困ることがある
  • 変更したいなら、ファイルを追加してremoveなりaddなりchangeなりするのが最善。
  • Railsでは、わざわざマイグレーションファイルを全部残すようになっている。途中から参画するメンバーも困ることが減る。

SQLite3のプライマリキーの管理

  • SQLiteの場合は、DBのsqlite_sequenceで管理している。
  • 各テーブルでプライマリキーを生成しているわけではない。
  • sqlite_sequenceを見ると、nameseqがある。
  • nameはテーブルの名前
  • seqはレコードの数。新たにレコードができた時、ここの数に1を足して、新しいレコードにプライマリキーを付与している。
  • プライマリキーを特定の数から始めたいなら、seqに自分で初期値を入力することで対応可能。
  • 使うDBごとに管理の仕方が違う。あくまでもSQLiteの話。

rails db:rollback (調査中。嘘が書いてあるかもです)

  • 今やったことを無しにする。
  • 無しにすると言っても、なかったことにするわけではない
  • 無しにする作業を追加する。
  • rails db:rollbackすると、Railsは「逆のことをして、という指示を受けた」と認識する。
  • カラム追加後のroのlback → Railsはカラム削除の作業をする
  • カラム削除後のrollback → Railsはカラム追加の作業をする
  • マイグレーションファイルは、中のメソッドがchangeとなっているが、UPやDWONでも書くことができる。
  • UPはadd_column、DOWNはremove_columnになる。(ここら辺もうちょい確認必要)
  • rollbackでUP・DOWNを書く時、逆を書かねばならないので注意(ここも理解が浅い。)
  • ややこしいが、これができるのが一番Railsにとって理想的な動きになる
  • 参考↓

qiita.com