#データベースを設計する前に
データベースは多くの場合、アプリケーション本体よりも長く付き合っていくものになります。(開発している段階から使用する+他のアプリケーションでもそのデータベースを使う可能性があるため)
適当な名前をつけたり、一貫性のない名前の付け方をすると、読みづらくなるだけではなくトラブルの温床になります。自分だけしか利用しない場合であっても、以下の点を最低限考慮して設計すると良いでしょう。
##予約語
データベースのテーブル名やカラム名などを決める際にまず考えなくてはいけないのは、使用したい言葉が予約語にないものかどうかを確認をすることです。予約語にその単語がある場合、SQLコマンドが正常に動作しない場合があります。
例えば、PHPだと使用するmigrationやseedingをartisanコマンドで実行した場合には、うまくいくけれど、その時発行されるSQL文を直接コンソールから入力すると予約語のエラーになるなどして、トラブルの原因特定が難しくなります。そのため、設計の段階から予約語は使わないように心がけましょう。
実際に使ってしまった予約語
column
order
こちらでMySQL公式サイトから予約語の確認ができます
ページ内検索をかけて確認しましょう
##テーブル名は複数形
基本的にはテーブルに複数のカラムが入ることになるので、入る名称の複数形をつけることが一般的です。
例えばPHPでLaravelを使用しているとき、Modelクラスで定義したクラス名(単数形)とデータベース側のテーブル名の複数形が紐づくようになっているため、特別な理由がなければそのルールに従いましょう。
例)Model:Userクラス→Database:usersテーブル
※余談ですがLaravelの場合、「複数形」は英語のルールに則ったものになります。
例) box->boxes
##単語と単語の間は「」で区切ろう
データベース内では大文字小文字が基本的に区別されません。
そのため、単語と単語の間は「」で区切るような名前をつけると良いでしょう。この形式を「スネークケース」という。
例) user_id
##外部キーを設定するときには、「テーブル名+_+id」で指定しよう
テーブル同士に関連性を持たせる場合、外部キーなどを設定することがあります。多くの場合、外部キーの制約はPRIMARY KEYとなるidに対する制約をすることが多いでしょう。カラム名をみただけでどのテーブルの何カラムに対する外部キーなのかがわかるようにしましょう。
例) usersテーブルのidカラムに対する外部キーをuser_infoテーブルに設定する場合
usersテーブル | user_infoテーブル |
---|---|
id | id |
account | name |
password | address |
users_id |