CreaTools LogoCreaTools
Case Converter

DB設計時のカラム名変換テクニック|camelCaseで事故った話

2025-12-28

:::note ※DBの命名で事故りたくない人向けの「回避ガイド」記事です :::

結論(私の判断基準)

  • DBは snake_case 一択。例外はない
  • camelCase は事故る。私は事故った
  • 可読性より一貫性。後から直すのは地獄

🚀 一括変換 → Case Converter


私がDBで事故った話

PostgreSQLで userName というカラムを作った。

CREATE TABLE users (
  userId INT,
  userName VARCHAR(100)
);

PostgreSQLは大文字を小文字に正規化する。userNameusername になった。

問題はここから。アプリケーション側では userName でアクセスしようとする。見つからない。username で書き直した。

でも別のテーブルでは user_name を使っていた。usernameuser_name が混在。どっちがどっちか分からなくなった。

camelCase でDBを作ると、後から直すのが地獄になる。


なぜDBは一段厳しくすべきか

理由1:後から直せない

コードの変数名は検索置換で直せる。DBのカラム名は、マイグレーション、データ移行、アプリケーション修正が必要。

理由2:複数人で触る

DBは複数人で触る。チームの誰かが違う命名をしたら、混在する。

理由3:DBMSによって挙動が違う

DBMS大文字の扱い
PostgreSQL小文字に正規化
MySQLOSによって異なる
SQLite大文字小文字を区別

snake_case で統一すれば、DBMSの違いを気にしなくていい。


よくある失敗(私が見たケース)

失敗1:キャメルケースで作ってしまう

-- ❌ 環境によって動作が変わる
CREATE TABLE UserProfile (
  userId INT,
  userName VARCHAR(100)
);

失敗2:予約語と衝突

-- ❌ user, order, index などは予約語
CREATE TABLE user (
  order INT
);

users(複数形)や user_order のようにする。


一括変換の手順(私のやり方)

1. カラム候補をリストアップ

ユーザーID
ユーザー名
作成日時
更新日時
削除フラグ

2. 英語に翻訳

user id
user name
created at
updated at
is deleted

3. Case Converter で snake_case に変換

user_id
user_name
created_at
updated_at
is_deleted

命名のコツ(私のルール)

日時系

意味カラム名
作成日時created_at
更新日時updated_at
削除日時deleted_at

_at で統一。

フラグ系

意味カラム名
削除済みis_deleted
有効is_active

is_ プレフィックス。


迷ったときの判断

迷い私の判断
camelCase を使うか使わない。事故る
可読性と一貫性一貫性を取る
後から変えるか変えない。最初から snake_case

この記事で解決しない場合


DBは snake_case 一択。camelCase で事故った経験がある人なら分かる。