3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rails初心者が爆速で中級者になるまで駆け抜ける25日カレンダーAdvent Calendar 2018

Day 7

Railsの自己結合① 初心者→中級者へのSTEP7/25

Last updated at Posted at 2018-12-07

#Railsの自己結合
はじめに
今回は自己結合についてです。バックエンドっぽいです。土日が待ち遠しいです。
頑張ります。

##自己結合とは##
そもそも結合って?
2つのリレーションに対し、指定した条件を満たすように1つのリレーションへと統合すること。
内部結合、外部結合など結合の仕方は色々あります。今回はその中の一つ自己結合についてです。

なんで結合するん?
例えば下記のようなリレーションが二つあります。

人物リレーション

id name country_id
1 taro 1
2 jiro 1
3 tom    2

国リレーション

id name
1 japan
2 America
3 India

taroの国はどこだっけ?となった時、人物リレーションから住む国のidを調べ、次に国リレーションから該当する国を見つける。二回リレーションを見るわけです。面倒です。なので結合してリレーションを見るのは一回にします。
今回の場合は内部結合でくっつけると下記のようになります。

id name country_id id name
1 taro 1 1   japan
2 jiro 1 1   japan
3 tom    2 2   America

taroの国はtaroの行を見れば一瞬でわかりますね。
このように結合は検索を楽にしてくれるのです。

自己結合って?
上の例では内部結合でした。二つのリレーションを結合しています。
ですが、自己結合とは同じ一つのリレーションを結合するのです。.....??

例を見せた方が早いですね。

id name firend_id
1 taro 2
2 jiro 1
3 tom    1

上記の場合、taro君の友達を探す時、taroの行のfirend_idをみる。次にそのidで探す。さっきと同じく二度手間です。
てな訳で結合します。イメージしにくいですが、上のリレーションと全く同じのがあったとして結合するとイメージしてみてください。そうすると以下のようになります。

id name firend
1 taro jiro
2 jiro taro
3 tom    taro

これで友達が一目瞭然になりました。これが自己結合です。

##まとめ
今日は少なめです... 明日はRDMなので...
続きは、以上をふまえて明日、railsでの自己結合を掘り下げていこうと思います。

##参考にしたの

SQL素人でも分かるテーブル結合(inner joinとouter join)
https://qiita.com/naoki_mochizuki/items/3fda1ad6594c11d7b43c

Active Record の関連付け (アソシエーション)
https://railsguides.jp/association_basics.html#%E8%87%AA%E5%B7%B1%E7%B5%90%E5%90%88

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?