問題
多対多の関連を作るときの交差テーブル(中間テーブル、関連テーブルなどとも呼ばれる)にどのような名前をつけていますか?
2つのテーブル名を単純につなげた users_magazines
のような命名を見かけますが、これはあまり良い名前ではありません。
実体 (entity) は名詞に対応すると考えることができる。例えば、コンピュータ、従業員、楽曲、数学的定理といった名詞である。
関連 (relationship) は2つの実体間の関係を捉えたものである。関連は2つ以上の名詞句を結び付ける動詞に対応すると考えることができる。例えば、企業とコンピュータの間の「所有する」(owns) という関連、従業員と部門の間の「監督する」(supervises) という関連、アーティストと楽曲の間の「演奏する」(performs) という関連、数学者と定理の間の「証明した」(proved) という関連などである。
交差テーブルは関連(relationship)から生まれているものなので、関連の意味を表す命名をしましょう。
考え方
AとBというテーブルの交差テーブルの場合
A [動詞] B (AがBを○○する、した、している)
人 [動詞] A B (AにBを○○する、した、している)
となる動詞を考える。その動詞を「○○すること」と名詞の形に変えたものが必要な名前。これをCとする。
動詞の名詞形は、辞書を引くこと。場合によっては動詞語尾を変えた形よりも適切な単語がある場合もある。動詞と同形の場合もある。
見つからない場合は、動名詞(-ing)を使う。
Cが決まったら、ABCと連結した名前を作り、冗長なものや明らかなものを削る。
例:userとmagazineの場合
userがmagazineを購読する
購読する=subscribe
subscribeの名詞形はsubscription
連結してuser_magazine_subscription
このDBの中でsubscriptionがuserとmagazineの関係であることが明らかなら、userとmagazineを省略しsubscriptionとする。
単数形にするか複数形にするかは別途規約で定めましょう。
ちなみに複数形を採用する場合、Cは抽象的な名詞や動名詞なので不可算名詞になることがありますが、気にせず複数形にするのがよいと思います。なぜなら「レコード」や「行」は数えられるものだからです。(“Two coffees”と言えるのと同じ理由)
名前の例
- subscription (user <=> magazine)
- belonging, membership (user <=> group)
- friendship, relationship (user <=> user)
- tagging (thing <=> tag)
- categorization (thing <=> category)
- enrollment (user <=> course)
- affiliation
- ownership
- assignment (user <=> task)
- offer (school <=> course)
- employment (employee <=> company)
- participation
- like, favorite
自己結合の場合のそれぞれの呼び方
- source, target
- origin, destination
- follower, followee
- object, subject
もっと例を集めて共有すれば、それだけでかなりの部分で適切な命名ができるようになるはず!