【データベース設計】 テーブル名、カラム名の名前の付け方(命名規則)
データベース設計のテーブル名、カラム名の物理名について、とても個人的な自分ルールをご紹介。
テーブル名は、
- 小文字英数字とアンダースコアだけ使う。大文字は避ける。
- 一般的な英単語、ローマ字(ヘボン式)でつける。多少長くなってもいい。
- 頭に何かつける(t_***、m_***、c_***など)。
カラム名は、
- 小文字英数字とアンダースコアだけ使う。大文字は避ける。
- 一般的な英単語、ローマ字(ヘボン式)でつける。
- 頭にテーブル名を付ける。ものすごく長くなってもいい。
大文字小文字はDBMS、OS、プログラミング言語によって区別されたりされなかったりするので、無用なトラブルを避けるため。
ヘボン式で統一すれば、ツはtuなのかtsuなのか、シはsiなのかshiなのかで迷わなくなる。
テーブル名に t_***、m_***、c_*** などを付けて、テーブル、マスタ、多対多の関連を表すテーブル、ログ的なものなど、意味に応じて目印を付ける。目が慣れれば、テーブル名とテーブル名ではないものが視覚的に違うということもあって、見た目にわかりやすい。
名前は短い方がパフォーマンスが上がるのかどうか確かめていないが、長さは気にしない。
こんな感じになる。
/* 所属 */ CREATE TABLE `m_division` ( `m_division_id` int NOT NULL, `m_division_name` varchar(100) NOT NULL, PRIMARY KEY (`m_division_id`) ); /* 社員 */ CREATE TABLE `t_staff` ( `t_staff_id` int NOT NULL AUTO_INCREMENT, `t_staff_code` varchar(10) NOT NULL, `t_staff_name` varchar(100) NOT NULL, `t_staff_name_kana` varchar(100) NOT NULL, `t_staff_m_division_id` int NOT NULL, /* ←所属ID */ `t_staff_mailaddress` varchar(200) NOT NULL, `t_staff_status` tinyint NOT NULL, PRIMARY KEY (`t_staff_id`), UNIQUE KEY (`t_staff_code`) );
一見、カラム名が長いし、そんなに格好良いわけでもないのですが、開発はものすごく楽です
- データベース内でカラム名が重複しないです(ほぼ)。
- “t_staff”→”t_member”のような一括置換で、SQLやプログラムソースを書き換えて、他の機能に流用なんてことも可能です。
- 単純に「テーブル名+”id”」、「テーブル名+”name”」のように、カラム名=「テーブル名+一般的な単語」で命名していけるので、悩みが少ないです。
- 予約語なんて気になりません。
開発手法や使用するフレームワーク、使っている道具などによって、何が楽な方法なのかは違うと思います。
私からこれをお勧めしたいというより、同じことをしている方がどのくらいいるのか?似たようなことをして困ったこと、逆に便利でやめられないこと、普通はこうするもんだなど他の方の意見、感覚を聞けるとうれしいです。
misebox 2011年11月20日 23:55
こんにちは、参考にさせてもらってます。
カラム名にテーブル名を含むというのは面白いですね。一括置換とか、確かに色んなところで楽になりそう。
テーブル名にエイリアス使う必要もなくなりますよね。
自分はid, name, created_at, updated_atなどです。
そのテーブルのPKがidで、外部キーは、division_idのようにテーブル名をプリフィックスします。
クエリ中にはエイリアスを使い select a.id, b.name from m_table1 a left join m_table2 b …といった感じで、必ずabcにしてます。
問題にぶつかるまではとりあえずこれでいこうと思ってます。
so 2013年9月12日 16:40
自分は冗長性を排除したいので、カラム名にテーブル名は絶対につけません
文字数が純粋に長くなり、SQLを書くのがしんどいので。
プレフィックスもつけません、むしろそこで意味付けしてはいけないと
考えます。時間がたつにつれ意味付けは曖昧になっていきます。
テーブル名がmだっけcだっけ と混乱を招き生産性が下がります。
何も参照せず、悩みなく、そらでSQLを書くためには
最もシンプルな形、
テーブルは考えぬいた最も一般的な概念名の複数形
カラムは考えぬいた最も一般的な属性名 がベストです。
長い名前も嫌います 発音しやすく 省略せず 誰もが
同じ概念を思い浮かべるであろう最適な名前を見つけます。
SSPfun 2013年11月20日 15:59
私もカラム名にはテーブル名は含んでいなかったですね。
開発方法によりますが、こういった方法もあるんですね!勉強になりました。
テーブル名にプレフィックスは付けるようにしていますが…。
紙ベースでモデルの確認するときにはあると便利だったり、改修が入る時にも私にはしっくりきますね。
命名規則さえきっちりしていればという前提付きですが。
やっかいなのはプロジェクトごとに命名規則が変わっていて、他のサブシスと並べるとわかりずらくなることですかね。