laravelでのデータベースの命名規則

php/laravel

今回はlaravelを使用したデータベースの命名規則をまとめました。

テーブル名の規則

laravelの命名規則はスネークケース(区切りを_で区切る)と複数形になります。

テーブル名の例)
users
failed_jobs

ただし中間テーブル(多対多)の場合、単数形と単数形を_を区切ったテーブルになるので単数形になります。

またテーブルを複数系にする特性上、単数形と複数形が別の名前の単語を使うので少しデータベースの考慮が難しくなります。

カラム名の規則

カラム名は、スネークケースかつ基本単数形

カラム名の例)
video
video_url


基本はと書いたのは、複数を前提に設定されているカラムは複数形
複数でないと意味が通らない
例)
number of items アイテム数

複数系の方が意味が分かり安い
例)

販売するポイント(1000ptで販売等)

Sales PointsでもSales Pointとも表す事ができる。
だが、sales pointと書くとセールスポイント(販売する時のポイント(良い点))
ともとる事ができるので販売ポイントで考える時はpointsと書いた方が意味が分かり安い
sales points
を採用する方が良さそうである。

データベースの命名で下記の記事が面白かったので、読んでみるのもありかも。
https://kaki-engine.com/how-to-name-columns-in-a-table/

その他、迷う理由にあるのが、他の人のDB作成した形を見る事がなかなかできないからだと思ったのでec-cubeのカラム名とかは下記で参照できる。
https://ec4.umebius.com/tables/dtb_shipping

今回郵送で参考になったのは
sell→order(purchase)→shipping(発送)→delivery(配達)

shippingとdeliveryが別になってたので調べたら別儀だったので参考になりました。

※orderは注文して商品が届くまでにラグがある者
purchaseは購入なので即時に物が届くイメージ。

その他カラム名をまめてくれているqiita

https://qiita.com/otagaisama-1/items/4d7e2eb5c274e9fce664

カラム名の命名パターン

テーブル名に帰属するデータは接頭語は基本無しとする。

例)usersテーブルに下記のカラムがあった場合はuser情報に付属するデータとする。

name
email
phone

ただしusers情報のテーブルに違うでnameデータを入れる場合がある。例えば所属する会社の名前等その場合は接頭語を付けてカラム作成します。

company_name
company_email
company_phone

数を表す数はnumber ofを採用する

よくある表記として

item_number になってしまうとアイテムのシリアルナンバーと勘違いするケースがでるので

number of itemsを採用する。

単数形と複数系が同じ名前をできれば避ける

上記のような単数形と複数形の形式があるのに、単数形と複数形が同じ名前の場合混乱の原因になりやすいので、単数形と複数形が同じ英語はできたら避けています。

新着情報のテーブルを作る時


× newsだと単数形と複数形が一緒
○ information

2値のカラム(カラムがboolean型の場合)

is_状態で記載をします。
これによりTrueの時の状態が分かりやすくなります。

例)
is_true

の場合は1がtrueで0がfalseと分かる。

boolean型で使うパターン

display表示・非表示
true真偽
publish公開・非公開

日付について

作成日・更新日・削除日についてはlaravel標準のat表記を使う

create_at作成日
update_at更新日
delete_at削除日

日付と日時で表示変更する。
下記はアンチパターン

live_start_date 2020年10月1日公開
live_start_date_time 2020年10月1日19:00公開等

上記もlaravelであればatやonを使って冗長化させないのが吉
日付であれば

日付を表す場合(例  2020年10月1日開始)start_on
時間まで表す場合(例  2020年10月1日19:00開始) start_at

と表します。

意味が分からない略語は使わない

よくあるパターンとしてcodeをcdど略すパターンがありますがこれはNGです。
Maximumをmaxとして一般的に流通しているような場合に限り冗長性を下げる為に使用します。