あるユーザーがいて、それに1対1で対応するテーブルがある時、 A has_one B
という関係が成立する
で、このとき has_one
を使う理由が分からなくて、テーブルA にカラムを追加しちゃえば単純でいいじゃんと思っていたのだが
これのせいでマイグレーションに今異常に時間がかかって 暇なので 書いた。
has_manyの例しか出てこないのだが根本は同じはず
user: ユーザー
users_shifts: シフト (月~金)
class User
has_many :shifts
end
class Shift
belongs_to :user
end
シフトは 月~金 までしかないので、Userのカラムに追加することもできるが
それだと users テーブルにレコードが1000万行の時にAlter文がとてつもなく重くなる。
しかも土日のシフトが生まれたりするとまたAlter文を発行しなければならない。
なのでテーブルを別にすると、そういった処理が必要無い。
愚者は経験に学び、賢者は歴史に学ぶ って意味がわかった気がする。