19534
Rails4+DeviseでUserデータの管理を行っております。

今回、Userデータをログイン以外にプロフィール管理など10数項目のカラムの追加をしようと思っているのですが、その際、「単にカラムを追加」するか「別テーブルにしてhas_one
と belongs_toの従属の形」で作ろうか検討しております。

別サービスなどでの使い回しの上では別テーブルにした方が再利用の面でも良さそうですが、頻繁に呼び出すユーザーテーブルと考えるとパフォーマンスの面でも追加カラムにした方が良いのか判別しにくいと思っております。

こちら同じような検討されて方がいれば、どのように実装したか教えていただければと幸いです。
CC BY-SA 3.0
2015-12-01T12:11:30.983
19519
2015-12-02T01:29:31.750
8919
question
ruby-on-rails
Rails4+Deviseでのカラムの追加について
この手の質問は人によって回答が分かれそうなので、スタック・オーバーフロー的にはNGなのかもしれませんが、とりあえず参考までに回答しておきます。

10数カラム程度であれば単にカラムとして追加、で構わないと思います。

もし50とか100とか、「User.findするたびに毎回こんなに大量のデータは使わんだろう」というボリュームなのであれば、パフォーマンス問題を考慮して`has_one`を検討するかな、という感じです。
CC BY-SA 3.0
2015-12-01T22:31:15.827
19532
2015-12-01T22:31:15.827
85
19519
answer
usersテーブルは認証情報を保存するテーブルである、と定義するなら、認証に使わないプロフィール情報は別テーブルにしたほうがいいでしょう。プロフィール情報はプロフィール情報なのでDeviseに触られたくない、という考え方もこちらに入ります。

usersテーブルはユーザーに関する情報を保存するもので、プロフィール情報も認証情報もそれに含まれる、と定義するなら、usersテーブルにプロフィール情報のカラムを定義すれば良いでしょう。

要は`users`テーブルは何なのか、という考え方次第なので、そこの位置づけをはっきりさせれば自ずとどちらにするかは決まると思います。

インデックス経由での検索が1回になるか2回になるか程度の違いなので、極端にパフォーマンスが問題になる環境で無い限り、さほど差は無いのかなと思います。
CC BY-SA 3.0
2015-12-02T01:29:31.750
19534
2015-12-02T01:29:31.750
5793
19519
answer