Railsでいいね機能を実装するときに質問なのですが
user_idとpost_idにindexやforeign_keyをつけるかみたいな話です。
もう一度整理したいので、質問致しました。
- 複合インデックス
- foreign_key
- 単一のindex
について質問したいと思います。
①
私の考えでは,複合indexをつける必要があり、ここでは、
- user一人当たりに一つの投稿に一回しかいいねができない。
- 「一人がいいねしている複数投稿」を検索するときに、高速になる。
という認識で合っていますでしょうか?参照
Ruby
1add_index :likes, [:user_id, :post_id]#user一人当たりに一つの投稿に一回しかいいねができない
②
qiitaを参照して見ると、foreign_keyをつけている方が居ます。
ruby
1def change 2 create_table :likes do |t| 3 t.references :user, foreign_key: true, null: false 4 t.references :tweet, foreign_key: true, null: false 5 t.timestamps 6 end 7 end 8コード
ここで、foreign_keyをつけてしまうとuserやpostを削除するときに、likeテーブル(子テーブル)にuser_idが存在するから削除できない。となりますよね?
だからforeign_keyはつけるべきでないと思っています。
③
Ruby
1add_index :likes, :user 2add_index :likes, :post
単一のindexを付与すると、
- 「誰がいいねをしているのか」を検索するときに早くなる
- 「いいねしている投稿」を検索するときに早くなる。
と思うのですが、
前者は複合インデックスを作った方が早いのではないかと思ってしまします。
後者は複合インデックスの方が早いと思うのですが、つける意味はありますでしょうか?
私の認識で間違い等ありましたらご指摘願いたいです。
よろしくお願いいたしますm()m
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/12 05:16
2019/02/12 05:20
2019/02/12 05:25