背景
本日、Kaigi on Rails_2022_newというイベントがありました。Kaigi on Rails_2022_new自体の感想は別途書くとして、@maimux2xさんの「初めてのDB定義」*1という発表を聞いているときに、「そういえば自分はカラムの命名規則で迷うことがあるな」と思ったので、それをTwitterで呟いてみました。
いただいたリプライやKaigi on Rails_2022_newの懇親会で思考が整理できたので、それをまとめてみたいと思います。
迷いだったこと
結論
迷っていた背景
自分がそれを認識したソースはこれじゃくて何かDBに関する本だった記憶なんですけど、この記事に書いてあるカラム名についての話と大体同じです。(どの本だったか忘れてしまったし、記事にあるヘボン式については自分は頭になかった)https://t.co/WB1FfCZTIa
— 🐈 (@neko314_) 2022年10月9日
DBの本か何かで「カラム名にはテーブル名のプレフィックスがある方が良い」というのを読んだ記憶がありました。ツイートにも記載した通り、それがなんの本だったかすぐに思い出せないのですが、その本以外にも現実で同意見を述べる人には何度か出会ったことがあったので「DBの気持ちになるとそういう考えになるのかな」と思っていました。
自分の理解のソースが曖昧だった代わりにこのツイートでは10年以上前の個人記事を紹介させていただきました。オフィシャルな根拠としては薄いと思いますが、自分の理解と記事に書いてあることがおよそ一緒だったので、その瞬間の私の認識の代弁にはなっていたと思います。
結論の根拠
ActiveRecordが適切なSQLの発行を担ってくれているから
とりあえずカラムにテーブルつける利点に挙げられてる「カラム名が重複しない」は、SQL書くときにテーブル名省略してカラム名だけ書いてもSQLが通りやすいってことだと思うので、アプリ側でORマッパー使ってれば気にしなくていいかなと思いました。
— やきとりい (@yotii23) 2022年10月9日これは言われるまで考えてなかったのですが、リプを読んだ瞬間に腹落ちしました。*2
users
テーブルのname
カラムで情報として必要十分と考えられるから
参考
やんちゃさんがgistに幾つかのパターンをまとめてくださいました。
めちゃくちゃ短時間で書き上がってきてすごく驚いたというのが一番大きな感想だったりしますが、それはさておいて、自分がこのブログを書けるくらいに整理できたのはこのgist+会話の影響が大変大きいです。またgistに書いてあることには「確かにそうだな」って思っています。
結論とともに(改めて)思ったこと
- その時々のベストとその理由を自分の頭で考えるのが大事
- このツイートが全て
そうそう、だいたい問題無いと思います。元記事にもありますが開発手法やフレームワークによって「良い」はそれぞれ違うので、「なんでそれが良いとされるか」「この場合はどうするのがより”良い”なのか」を都度考えるしかないっすね〜。
— やきとりい (@yotii23) 2022年10月9日- 「その時々の一番いい選択をする」ということの大事さはお仕事で身をもって学ばせてもらっているので、 @yotii23 さんにこのリプもらって「はい!!!」(正座!!!背筋は真っ直ぐ!!!)っていう思いになるばかりでした。
- このツイートが全て
- Railsでは「プレフィックスなくて大丈夫」と強く言って大丈夫そうだけど、他ではそうじゃないかも知れないので、もしRails以外のWEB開発とかDB設計とかする機会が訪れたら、アンラーニングする心構えで取り組んでいこう思いました(そんな日が来るかはわからない)
- 些細なことでもモヤッとしてることは言語化したり聞いたりした方がいい
- この疑問は多分1年くらいずっと考えていたもので、「あーそういえばこれどうなんだろうなー」と心で引っかかりはする瞬間は何度かありました。しかしスルーしていつも通りやって仕舞えば済むケースが多くて流してしまっていました。1年越しで整理できたのはよかったのですが、その時間と少からずこの点で幾度か自分の少ない脳内リソースを消費していたことがもったいなかったなと思います。
最後に
Twitterで助言をくださったお二人、Kaigi on Rails_2022_newの懇親会で一緒に議論してくださった皆さんのおかげで理解が深まり、意見を整理することができました。ありがとうございました。
2022/10/12追記
@tmtms さんが感想を呟いてくださっていました。やっぱりそうしたい考え方もあるのだなあと参考になりました。現時点で参考になるだけでなく、きっと将来見返してこのようなDB詳しい人からの意見を吟味したい時がいつか来るように思うので、すぐ見返せるようにツイートを追記しておきます。
特定のフレームワークからしか使わないDBは当然そのフレームワークに従うんだけど、フレームワークの都合とかを考えずにテーブル設計するとしたら、テーブル間で JOIN するようなカラムには同じ名前をつけたい気はするな。
— とみたまさひろ🍣🍺 (@tmtms) 2022年10月9日
そんで、自動採番されるようなカラム(idとか)以外は、データベース内で名前が重複しないようにもしたい。
— とみたまさひろ🍣🍺 (@tmtms) 2022年10月9日
*2:いつもありがとうActiveRecordという気持ちになりました
*3:懇親会で口頭で話した内容。自分も同意見ではあったのですが、やんちゃさんの発言の意図とはくちがっていないだろうか