こんにちは!株式会社オルトプラスの楠元です。今回は私のサーバーエンジニアとしての経験から、まだDB設計をしたことがないよ〜とか、ちょっと苦手でいつも迷ってしまうよ〜といった若手サーバーエンジニアの方に向けて、DB設計で押さえておきたい6つのポイントをご紹介しようかと思います。

まあググればqiitaとかもっと親切に説明してくれてるサイトもあるかとは思いますが、あくまで私はこう思ってる(学んだ)、という情報かつゲーム開発での実体験がベースとなりますので、参考にしていただけますと幸いです。

それでは早速本題に入りましょう〜

ポイント

命名ルールを決める

名前なんて何でもいいでしょ、と思う方もいるかと思います。かく言う私も「分かればなんでも良くない?」派です。ただこの「分かれば」と言うのが、

「このテーブル/カラムは誰が見てもこういう役割だ、と理解できる」

ことを前提とした場合、最初にルールを決めてプロジェクトメンバーに周知しておくか否かが理解しやすさに影響します。※これはDB設計に限った話ではなく、コーディングにおいても同様です。

例えば、「個数」と言う情報をカラムとして持たせたい場合、カラム名として英単語的には3つくらい候補があります。

どれを使うべきか迷いませんか?その迷いから同じ「個数」を指すのにテーブルによって異なるカラム名で定義されてしまう可能性があり、理解の妨げになってしまいます。こうした複数の英単語が連想できたりニュアンスに微妙な違いがあるものは、あらかじめルールを決めておくことで迷いや設計者による差分をなくしましょう。

このセクション最後に、命名ルールとしてよく決めていることを以下にご紹介しておきます。

など

型指定を疎かにしない

当たり前のことと思われるかもしれませんが、意外と見落としている人が多い印象です。型指定を疎かにすると、サービス影響が発生する事態に発展するリスクがあります。

例えばIDやアイテムなどの所持数カラムについて、全部数値だからと深く考えずにint型として定義してたりしませんか?MySQLではint型(Unsigned)が取りうる値は0~4,294,967,295です。

MySQL :: MySQL 8.4 Reference Manual :: 13.1.2 Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT