昔から users_teams
のようにテーブルに名付けることが多かったが、これは推奨される方法なのかどうかがわからないので整理する。
とりあげる事例
- 本は著者を持つ
- 著者はいくつもの本を持つ可能性があるので、N:Nの関係になる
というようなモデルを作るとに、以下のようなER図になるパターンの場合の間を取り持つテーブル名が今回のテーマ。
この場合に「ふたつのテーブル名を使ってauthors_books
という名前を中間テーブル名にするのがよい」という意見があるが、その意見はどこから来て、現在ではどう捉えるべきなのかを整理する。
なぜこの方法が推奨されていたか
この命名は has_and_belongs_to_many
を利用するときの考え方に則したものとなっている。たとえば、先程のケースの場合は以下のようなモデルを定義する。
class Author < ApplicationRecord has_and_belongs_to_many :books end class Book < ApplicationRecord has_and_belongs_to_many :authors end
このようにすることで、AuthorとBookのN:Nの関係を表現できる。
この場合、Author
とBook
を関連付けさせるための関係を中間テーブルを使って表現する必要があるのだが、「このテーブルが中間テーブルとして利用します」ということを宣言していない。そのため、テーブル名の命名規則で表現する必要があり、authors_books
という命名をする必要がある。
この流れから「中間テーブルには2つのモデル名をスネークケースでつなげる」というような名前になるケースが多かった。
現在ではどうなのか
現在ではRailsガイドにもあるように、has_and_belongs_to_many
の利用は推奨はされていない。。また、has_many :through
も存在するので、命名もルールに縛られて定義する必要がない。
そのため2025年時点では普通に中間テーブル名のネーミングを考えるアプローチをとり、意識をしないとしたとしてもふさわしい名前を考えてあげるほうがよいと思われる。