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 のシャーディング規則
- シャードのデータ数はだいたい同じになるようにする
- 剰余など原始的な方法でデータを分割する