目的
久々にテーブル名を考える機会があったので、思考内容を残しておくという意味で。
あくまで個人(しかもDB詳しくない人間)の考えなので、こいつこんな事考えてるんだなー程度に。
テーブルとして考える
まず、テーブルとして考えてみます。テーブルはレコードの集合です。
ユーザテーブルを考えると以下のようになります。
id | name |
---|---|
taro | 太郎 |
goro | 五郎 |
: | : |
太郎はUserです。五郎もUserです。
Userが複数入っている。つまり複数形であるUsersになるのが自然な気がします。
次に関連で考えてみます。
User
id | name |
---|---|
taro | 太郎 |
Activities
user_id | action |
---|---|
taro | 踊る |
taro | コケる |
taro | 捻挫する |
ユーザとアクティビティを表すならこんな感じでしょうか。
1対多のデータ構造の場合も複数形が妥当な気がします。
しかし、1-1で関連を持つものや1レコードしかデータが存在しない場合などは単数形でも問題ないと思います。
SQLで考える
次にSQLベースで考えてみます。
単数形の場合
SELECT *
FROM user
WHERE user.id = 1
このWHERE句だけ見ればユーザIDが1、またIDという名前から一意のレコードをとることがすぐに認識できるので複数系より好ましく思えます。
しかし、FROM句を見るとuserという単一のものから絞り込もうとしているように見えて違和感があります。
複数形の場合
SELECT *
FROM users
WHERE users.id = 1
FROM句は複数形の方がしっくりきます。
WEB APIとして考える
WEB APIのエンドポイントも複数形が多用されます。
必ずしもAPIのリソース名 = テーブル名、という訳ではないですが統一されていた方が混乱は少ないと思います。
ORMを使う場合
基本的にエンティティ名やクラス名は単数形で付けます。
そしてORMによって自動生成されるテーブルの名前はクラス名と同名になります。
しかし、これはORMを使う上での都合でありテーブルの名づけには関係がありません。
エンティティで扱う単位とDBのテーブルで扱う単位が違うので比較対象にもなりません。
まとめ
- テーブル名は基本的には複数形で良い。
- データ構造から単数形が相応しい場合は単数形の名称を付ける。
といった感じです。
実際にお仕事やチームで開発する時は周りと相談して付けるのをおススメします。
余談
英単語には複数形がないものも存在します。使おうとしている単語が存在するかは一度調べておくべき。
誤用だったりスペルミスだったりが意外とあるものです。