交差テーブルの命名法

きっかけ

RDBにおいて、変異と患者、変異とメタデータ等、多対多の関係で複数のテーブルを紐づける際に必要なのが(厳密に言うと定義すべきなのが)、交差テーブルです。
(参照:SQLアンチパターン - ジェイウォーク

この命名法として、variants_patientsみたいに結合するテーブル同士を_でつなげただけのテーブル名で定義していた。 reference_id_tableとか、id_table とかで定義している時もあった。これだと交差テーブルが複数使われる場合に対応できない。reference_id_table_2とか、id_table_2 が出てくるのかと。

不安があった。 なんとなくこれじゃない感がしてた。

やっぱ違うらしい

2つのテーブル名を単純につなげた users_magazines のような命名を見かけますが、これはあまり良い名前ではありません。
参照:交差テーブルには関連の意味を表す名前をつけよう

あまり良い名前じゃないらしい。。

交差テーブルは関連(relationship)から生まれているものなので、関連の意味を表す命名をしましょう。
参照:交差テーブルには関連の意味を表す名前をつけよう

動詞を使うといいらしい。。

AとBというテーブルの交差テーブルの場合 A [動詞] B (AがBを○○する、した、している) 人 [動詞] A B (AにBを○○する、した、している) となる動詞を考える。その動詞を「○○すること」と名詞の形に変えたものが必要な名前。これをCとする。 動詞の名詞形は、辞書を引くこと。場合によっては動詞語尾を変えた形よりも適切な単語がある場合もある。動詞と同形の場合もある。 見つからない場合は、動名詞(-ing)を使う。 Cが決まったら、ABCと連結した名前を作り、冗長なものや明らかなものを削る。
参照:交差テーブルには関連の意味を表す名前をつけよう

納得。

SQLアンチパターンでも

Accounts テーブルと Products テーブルを結合する際に Contracts テーブルを使用している。 わかりやすいかは微妙だがかっこいい。

変異と患者の関係とは

have な気がする。 → patient_have_mutationとか?

誰かもっとセンスあるテーブル名下さい。

交差テーブルの主キー

交差テーブルは必要だったら付けましょう。 必要だったらの判断が難しいところですが、IDの対応によって検索したい場合に入れるでいい気がします。 主キーの名前は結合する各テーブルの主キーをカンマ区切りでつなげたモノ(例えば (product_id, account_id))が良いでしょう。

参考

主キーを識別用以外に使わない

SQLアンチパターン

SQLアンチパターン