オブジェクトの命名規約
DB設計によく携わっていた頃に多くのプロジェクトで共通で規定されていた規約をまとめてみました。
ここでは オブジェクト として以下のものを対象としています。
(カラムはテーブルの一部ではありますが、別で切りだしています。)
- テーブル
- カラム
- インデックス
- 制約
1.全般
大文字を利用しない
テーブル名、カラム名ともに大文字を利用しない。
(DBにより大文字小文字を区別するもの、しないものなどがあるため小文字で統一を図る)
| 名前 | OK/NG |
|---|---|
| DOCUMENTS | x |
| Documents | x |
| documents | o |
複数単語の連携は スネークケース
テーブル名、カラム名ともにスネークケースを利用する。
キャメルケース、キャメルバックはNG。
| 名前 | OK/NG |
|---|---|
| tableName | x |
| TableName | x |
| tablename | x |
| table_name | o |
英語表記
基本的にはローマ字ではなく、英語で。
略名は利用しない
| 名前 | OK/NG |
|---|---|
| start_dt | x |
| maker_cd | x |
| start_date | o |
| maker_code | o |
2.テーブル編
基本系 は 〜s(複数形)
| 名前 | OK/NG |
|---|---|
| document | x |
| documents | o |
| category | x |
| categorys | x |
| categories | o |
n:nのテーブル
〜s(複数形) + "_" + 〜s(複数形)
| 名前 | OK/NG |
|---|---|
| userscategories | x |
| user_categories | x |
| users_categories | o |
@ryo88c さんの案に、今までのプロジェクトでのケースを加えさせていただきました。
3.カラム編
ある瞬間の状態(ステータス)を表す名前とする
| カラム名 |
|---|
| name |
| age |
| is_working |
| ... |
ある任意のタイミングの情報を管理するというDBの特性から考えたら当然では有ります
以下のカラムは必須
| カラム名 | 役割 |
|---|---|
| id | 主キー |
| created_at | 登録日時 |
| updated_at | 更新日時 |
他テーブルの主キーとジョインするカラムは テーブル名(単数系)_id
| カラム名 | OK/NG |
|---|---|
| categories_id | x |
| category_id | o |
flg/kbnなどの略名は利用しない
flag は on/off の意味がわかりにくいため、できるだけ使用しない。
( delete_flag は on で削除? off で削除?)
| 名前 | OK/NG |
|---|---|
| delete_flg | x |
| delete_flag | △ |
| is_deleted | o |
時間を表すカラムは 受動態_on 、受動態_at
Railsの基礎知識 - - Railsドキュメント より。
DATE型のカラムには名前を「受動態_on」
TIMESTAMP型のカラムには名前を「受動態_at」
| 名前 | OK/NG |
|---|---|
| created | x |
| created_at | o |
| closed_day | x |
| closed_on | o |
4.制約編
ユニーク制約は uq_<テーブル名>_NN
users テーブルのユニークキーは以下のとおり。
(同一テーブルに複数ユニークキーが存在していた場合、 01 の部分を2桁のゼロフィル連番値で加算していく。)
- uq_users_01
5.インデックス編
インデックス は idx_<テーブル名>_NN
users テーブルのインデックスは以下のとおり。
(同一テーブルに複数インデックスが存在していた場合、 01 の部分を2桁のゼロフィル連番値で加算していく。)
- idx_users_01
ユニークインデックス は ui_<テーブル名>_NN
users テーブルのユニークインデックスキーは以下のとおり。
(同一テーブルに複数ユニークインデックスが存在していた場合、 01 の部分を2桁のゼロフィル連番値で加算していく。)
- ui_users_01
こんな規約もあるよ!という意見お待ちしています。
2017-01-22(日)
以下の方のご指摘を反映
2016-06-29(水)
以下の方々の案を追記
2016-01-08(金)
以下の方々の案を追記