SQLのエイリアス、連番も悪ではない?

エイリアス
偽名、別名、通称などを意味する言葉です。
今回お話しするSQLにおいては、
AS句によりカラムやテーブル、サブクエリに対して付けられる別名を指します。
エイリアスはプログラムにおける変数名を付ける時のように、
名付けの注意点や避けるべき名付け方があります。
その1つが「連番」です。
今回は連番を避けるべき理由と、実は悪い点ばかりではないかも?
というお話をしていきます。

エイリアスの良い名付け方

一般的に良い名付け方とされているのは、
「それが何なのかが分かる名前を付ける」ことです。
プログラムの変数名と同じですね。
例えば、
英単語を短縮する(departmentテーブルに対してdept)、
英単語の前からn文字を切り取る(customerテーブルに対してcus)、
意味合いを表す単語を付け足す(customerから絞り込んだサブクエリに対してcus_vip)、
などです。
そうすることで、書き途中に混乱することを避けられたり、
読み手もSQLの流れが掴みやすくなったりと一石N鳥です。
更にはエイリアスの付け方をチーム内で統一することで、
可読性がより向上し、検索もしやすくなります。

エイリアスの悪い名付け方

悪い名付け方は上記の逆で、
「それが何なのか分かり辛い名前を付ける」ことです。
主に連番を振るような名付け方がこれにあたり、
テーブルに対してt1、t2、t3と付けたり、
アルファベット順にa、b、cと付けたりすると、
書き手は楽で分かりやすいかもしれませんが、
読み手にとっては地獄です。

連番も悪いだけではない?

この名付け方にも実は利点があると耳にしまして、
それは「定義箇所の位置が分かりやすい」ということです。
SELECT句にt1~t9まで出てきたとすると、
おそらくt1はFROM句の始めの方に、
t9はFROM句の終わりの方に登場しているだろうと察しがつきます。
複雑な箇所にはコメントを書けば読み手のハードルも下がり、
書き手も名付けにかかる細々とした労力を省くことができます。

これを聞いて確かに頭ごなしに否定する名付け方ではないのかもと思いました。
しかし、意味のある単語で名付ける方がリターンが大きいと私は思います。
特に思い出したり、読み返して確認したりするコストをカットする力が大きく、
SQLのどこで出てきても名前で何かが分かるのは読んでいて非常に楽です。
連番だと番号と対象の紐づきを忘れる度に定義に帰る必要があります。
定義箇所がパッと見で分かるのは良いですが、
検索するわずかな労力さえ払えれば番号を付けずともすぐに探せます。
また、連番は修正や改修にも弱く、
SQLの書き換えにより番号の並びが崩れる可能性があります。
その点でも意味合いから名付けるのが無難に感じますね。

まとめ

エイリアスも変数も、
面倒でも丁寧に名付けた方が後が楽です。
自分用のコードでも見返すのは数年後の自分かもしれません。
過去の自分にイラっとしないためにも、
全力で名付けてあげましょう。