テーブルのプレフィックスの定義とIDカラムについて
・まずはプレフィックスについて
テーブルのプレフィックスってよくあるのが、m_とかt_です。
m_はマスターテーブルで、t_はユーザーが登録するテーブルでそれだけでは足りないので、いろいろ付け足して行く事もあるかと思います。
たまに、m_だと思っていたらいつの間にかユーザーが登録するテーブルになっていたり。プレフィックスと違う仕様になっているのも見かけます。
なので次期システムではどういった命名規則にするかを考えていこうと思います。
定義する上でスタッフかユーザーかという視点よりもどれくらいの登録、更新頻度という分け方の方がいいのでは??という事で考察していきます。
m_**はマスターテーブルなので、スタッフが登録、更新するテーブル
なので1か月に1回くらいの登録、更新頻度
t_**はユーザーの入力という事で登録、更新する頻度はウォッチリストとかになると1日10回~100回、あとは入札とか落札といった登録と、会員登録といった所がユーザーが主に入力する部分かな、マイナーな部分でいくとマイ検索リストとかコミュニティの投稿はもうちょっと投稿してくれてもいいかと思いますが、、、発送指示とかもありますね。
でもまぁ、1日あたり10回~1000回ぐらいの更新頻度で限定できそうです。
次期システムの場合t_の次の通常フローとキャンセルなどのイレギュラーに発生するテーブルのプレフィックスを考慮しないとテーブルの数でいくとここの部分が大部分をしめるかと思います。
暫定的に倉庫での通常フローで発生するデータのテーブルをレギュラーからとってr_**でNG商品やキャンセルなどのイレギュラーで発生するデータのテーブルをi_**とかで定義してもいいかと思います。
オーバーサイズが通常なのかイレギュラーなのかが難しいところですね。
r_**の登録、更新頻度が落札の9割程度でi_**の登録、更新頻度がそのr_**の1割~2割ぐらいと分けるときれいにわけられるかと思います。
システムでログなどで大量に登録されるテーブルはh_**かl_**とかでいいかと思います。
更新頻度は100回~1万回/日であくまで削除されても特に影響がないサービスとかの場合のプレフィックスという事で。
最後にもともとコンフィグファイルで定義していたものをDBで管理するようになったテーブルとかはc_**とかで分けてもいいかも知れないです。ただ、m_**のテーブルの数がすくないのであればそういった分け方はしなくていいかもしれませんが。。
変更が多いマスターテーブルをどうするかを考えた方がいいかもしれないです。
システムで毎日変更しているようなマスターテーブルもm_**でいいのかどうか。1日1回ぐらいの更新なのであればやっぱりマスターテーブルですね。
・カラム名はDB内でユニークにすべき
よくテーブルのID名を「ID」とする事が今までおおかったけども、そうではなくてIDが必要な場合はテーブル名+_+IDとした方が運用保守中で検索するのに大変都合がいいためそうした方がいいです。あとは、status,category,type,などのよく見かけるカラムもできればテーブル名プラスでやってもらった方がありがたいですね。
DB内で同じカラム名がある場合は意味も同じでjoinできる状態であればきれいなテーブル構成かといえるのではないでしょうか?
今回はルールを決めるっていうには歯切れが悪かったけども、こういった方向でいけたらぐらいしか書けませんでした。