メインコンテンツまでスキップ

データベース

ヒント
  1. 編集中
  2. どんなプロジェクトでも使えるレベルなものにしていきたい

オブジェクトの命名規約

全般

プライマリーキー、外部キー

  1. 各テーブルのプライマリーキーは id とし、serial型とする
  2. リレーションする際はこの id を使う
  3. プライマリーキーに意味を持たせない
  4. 外部キーとのリレーションはテーブル名 + _id とする
      1. 親: class

        論理名物理名コメント
        ididserialauto increment
        クラス名namevarchar-
      2. 子: student

        論理名物理名コメント
        ididserialauto increment
        class_idclass_idinteger外部キー
        姓名namevarchar-

日付 / 日時

  1. 命名
    1. 年月日のみの場合は"xx日"、時刻まで必要な場合は"xx日時"とし、明確に使い分ける
      1. 日にちを表す項目は 受動態_on となり、date型
      2. 日時を表す項目は 受動態_at となり、timestamp型
  2. timestamp型はすべて timestamp(6) without time zone とする
    1. タイムゾーンを持たせない(標準の UST)
    1. 親: classes

      論理名物理名
      締切日closed_ondate
      締切日時closed_attimestamp
      削除日deleted_ondate
      削除日時deleted_attimestamp

大文字を使用しない

  1. 物理名は小文字とアンダーバー("_")のみを使用する
  2. テーブル名、カラム名ともに大文字を使用しない
    1. データベースによっては大文字と小文字を違う文字とみなす場合、みなさない場合があるので小文字で統一する
OK/NG名前
document
DOCUMENT
Document

単語の連結はスネークケース

  1. テーブル名、カラム名ともにスネークケースを使用する
  2. 大文字を使うキャメルケースやパスカルケースは使用禁止
OK/NG名前
table_name
tableName
TableName
tablename
table-name

英語表記

  1. 基本的に単語はローマ字ではなく、英語で書く

略名を使用しない

  1. 短くして意味が分からくなるよりは長くて意味がわかる名前にする
  2. ただし、データベースの種類や環境によって文字数が制限される場合は除く
  3. 以下は例外とする
    1. "数"に関する項目は _qty (Quantityの略)を付ける
    2. 例: minus_points_qty
OK/NG名前
start_date
maker_code
start_dt
maker_cd

テーブル編

単数形で書く

OK/NG名前
document
documents
category
categories

n:n用テーブル

  1. 接頭語にmap_を付ける
OK/NG名前
map_user_category
user_category

カラム編

  1. ステータスを保存する項目は状態を含めて書く
OK/NG名前
is_working
is_deleted
delete_flag

flg、kbnなどの略名を使用しない

  1. 例えば"flag"と付いたboolean型にした場合、trueとfalseが見ただけでどちらがonなのかが分からないため
OK/NG名前
is_deleted
delete_flg
delete_flag

制約編

  1. ユニーク制約は「テーブル名_uq_nn」とする
  2. _uq は固定文字。 nnはゼロ埋めの連番
  3. 例: user_uq_01

インデックス編

  1. インデックスは「テーブル名_idx_nn」とする
  2. _idx は固定文字。 nnはゼロ埋めの連番
  3. 例: user_idx_01