2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DBのテーブル名は複数形か?単数形か?

Posted at

目的

久々にテーブル名を考える機会があったので、思考内容を残しておくという意味で。
あくまで個人(しかも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のテーブルで扱う単位が違うので比較対象にもなりません。

まとめ

  • テーブル名は基本的には複数形で良い。
  • データ構造から単数形が相応しい場合は単数形の名称を付ける。

といった感じです。

実際にお仕事やチームで開発する時は周りと相談して付けるのをおススメします。

余談

英単語には複数形がないものも存在します。使おうとしている単語が存在するかは一度調べておくべき。
誤用だったりスペルミスだったりが意外とあるものです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?