僕は右へ行く

適当に書くよ!

`users`テーブルの主キー名に`user_id`はおかしくないですか

読んでます。

Webエンジニアのための データベース技術[実践]入門 (Software Design plus)

Webエンジニアのための データベース技術[実践]入門 (Software Design plus)


こちらの例でも出てくるのですが、たとえば`users`テーブルの主キー名には`user_id`になってたりするんですよね。
ですが、その割に「名前」フィールドは`name`になっているんです。
まあ合わせるなら`user_name`ですね。
実際他の例で`emp`テーブルに`emp_id`,`emp_name`,`emp_roman`,`emp_email`,`dept_id`となっていて、統一されています。

疑問

「`users`テーブルにある」ということが既に「users」というクラス(スコープ)に属していることを意味しているのなら
`user_id`は`id`の方が良いのでは?

他にFKがあるならそれにこそ接頭辞みたいに`〇〇_id`とすればわかりやすいかなと。

例えばJOINするときに、

SELECT `users`.`user_id`,`users`.`user_name`,`depts`.`dept_name`
  FROM `users`
       LEFT OUTER JOIN `depts`
       ON `users`.`dept_id`=`depts`.`dept_id`

ちょっと冗長な感じ。
別名を使うと

SELECT u.`user_id`,u.`user_name`,d.`dept_name`
  FROM `users` u
       LEFT OUTER JOIN `depts` d
       ON u.`dept_id`=d.`dept_id`

割りと見やすいですが、
`user_id`を`id`とすると

SELECT `users`.`id`,`users`.`name`,`depts`.`name`
  FROM `users`
       LEFT OUTER JOIN `depts`
       ON `users`.`dept_id`=`depts`.`id`

本来の意味に最も近いのではないでしょうか。

中間テーブル

一人のユーザが複数の部門に所属する場合、関連を表す`user_dept`テーブルを作るとして

CREATE TABLE `user_dept` (
  `user_id` INT NOT NULL,
  `dept_id` INT NOT NULL
);

みたいに、上の例でも出ましたけど、「テーブル名(単数)+_id」とすれば「そのテーブルの主キー」というイメージが直感的になるとおもいます。

もしかしたら

もしかしたらこういう中間テーブルで`user_id`となるのを見越して、それに合わせて`users`テーブルに`user_id`と名付けることが多いのかなぁ。
経験と体験が足りないからかよくわからない。