Help us understand the problem. What is going on with this article?

データベースオブジェクトの命名規約

More than 3 years have passed since last update.

オブジェクトの命名規約

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(金)

以下の方々の案を追記

genzouw
## Job Programmer ## Good at language Java, Groovy, PHP, Bash, JavaScript ## Other language C, C++, C#, Objective-C, VB, Delphi, HTML, CSS, SQL, Ruby
https://genzouw.com
zenkigen
「テクノロジーを通じて、人と企業が全機現できる社会の創出に貢献する」 『全機現』という言葉は、「人の持つ能力の全てを発揮する」という禅の言葉です。 多くの大人が全機現し、それを見た子供達が、大人になることに希望を持つ社会を次世代に引き渡したい。 その思いが当社の創業精神です。
https://harutaka.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away