web開発におけるMySQLの方針まとめ(外部キー制約の禁止、多対多の禁止など)
1 億件以上のデータを扱う中〜大規模のデータベースを設計している人に向けた MySQL の現実的な方針。
この記事は気づいたことをまとめたリストです。情報の正確性や妥当性は保証できません。
MySQL の最重要ルール
- 水平シャーディングを最初から考慮する
- すべてのテーブルで PRIMARY KEY を設定する
- NULL は許可しない
- 外部キー制約の禁止
- 多対多の禁止
- 一対一の禁止
MySQL の指針
- ビジネスロジックに相当するものは JSON で保存する
命名規則
- テーブル名は単数形にする
- カラム名はスネークケースにする
- 妙な接頭語をなるべくつけない
- 数値型は unsigned のありなしを厳格に定める
- datetime でなく timestamp にする
サンプル
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`status` tinyint(1) unsigned NOT NULL DEFAULT '0',
`author` json NOT NULL,
`title` text NOT NULL,
`date_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`date_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
MySQL のシャーディング規則
- シャードのデータ数はだいたい同じになるようにする
- 剰余など原始的な方法でデータを分割する
MySQLの基本