MySQL使用時の命名規則等について提案
この記事は2022/05/31に作成されました。
前書き
普段MySQLを使っていて、テーブルやカラムの名前を考えるのに時間がかかったことはありませんか?
私は1つ名前を付けるのに
・前回と同じ名前
・ほかの人の名前を参考にする
・前回とは違うが、より的確な名前
・関連したデータがあるとき用の、関連しているのがわかりやすい名前
・キャメルケースかスネークケースか
等々、さまざまな可能性を考えてしまうため、まぁまぁ時間がかかります。
後からやっぱり違う名前のほうが管理しやすいと考えて変更することもあります。
まだあまり数をこなしていないからかもしれませんが・・・。
この時間をもう少し短縮したいと考え、社内で命名規則を作成してはどうかという提案をしようという考えが頭に浮かびました。
これは一つの選択肢であり、必ずこの規則に乗っ取らなくてはいけないというわけではありません。
各自自分がやりやすい方法がある人はそれでいいと思います。
迷う人の参考になればいいな、というスタンスで提案します。
こっちのがいい、こういうのはどうか等ありましたら、ぜひ教えて頂けると助かります!
提案
- 大文字を利用しない
小文字で統一化 - 複数単語の場合はスネークケース
例:単価 -> unit_price - 単数形
複数形にする際の文字の変化がわかりずらかったりするので、単数形で統一。 - 名前の先頭に接頭語
一覧で見た際に接頭語の方がグルーピングがわかりやすいため、同じような概念のものを同じ接頭字を付ける。
例:姓 -> name_last 名 -> name_first
のように、名字と名前はどちらも名前に関係するのでnameを接頭字にする - info や data などの名前は避ける
無くてもそれが情報やデータだということはわかるため - フラグは is_ の接頭語
例:is_delete, is_up, is_show - DATE型 過去形_on
- TIMESTAMP型 過去形_at
こちらは、接頭字で他のグルーピング、接尾字でDATE型 or TIMESTAMP型の判断としたほうがわかりやすいかなと考えて接尾字を採用しています。
例:name_last (姓) と name_last_at (姓の変更日時)
is_hidden と is_hidden_at
例:テーブル名
テーブル名 | 目的 | 備考 |
user_front | フロントのユーザー | ユーザーの種類によって都度 _ の後を変えるとわかりやすい |
user_admin | 管理画面のユーザー(管理者) | |
user_staff | 管理画面のユーザー(スタッフ) |
例:カラム名
カラム名 | 目的 | 型 | 備考 |
name_last | 姓 | varchar | nameでグルーピングするとわかりやすい |
name_first | 名 | varchar | |
name_kana_last | セイ | varchar | |
name_kana_first | メイ | varchar | |
number_phone | 電話番号 | varchar | よくintにして頭の0が消える |
number_mobile | 携帯電話番号 | varchar | |
id | ID | int | |
id_staff | 担当者ID | int | idでグルーピング |
zipcode | 郵便番号 | varchar | ハイフンは無し。postalcodeより短いのでこちらを採用 |
まとめ
今回この記事を書くにあたり、いろいろな人達の意見を参考にしてみました。
その中でも、私がわかりやすいなと思ったものや、つじつまが合うようなものを組み合わせて1つの指標にしてみました。
今まで私が作成してきたテーブルなどでは上記に乗っ取れていないものもあるので、次回からはこのリストを意識して、他人が見てもわかりやすいような命名をしていきたいと考えました。
参考
プログラマー/A.A