はじめに
RDBの論理設計を学ぶ中で、設計の硬直性が開発の進捗に影響を与える可能性があることに気づきました。システム開発には不確実性がつきものですが、事前に知っておくべきアンチパターンは避けたいものです。そんな思いから、『失敗から学ぶ RDBの正しい歩き方』を手に取りました。
書籍情報
項目 | 内容 |
---|---|
書籍名 | 失敗から学ぶ RDBの正しい歩き方 |
著者名 | 曽根壮大 |
出版年 | 2019.3.6 |
ISBN | 978-4-297-10409-2 |
書籍ページ | https://gihyo.jp/book/2019/978-4-297-10408-5 |
本書は論理設計だけでなく、アプリケーション開発や運用面まで幅広くカバーしており、多くのアンチパターンとその対策が紹介されています。
本書の特徴
- 開発者同士の会話形式による現場エピソードで、問題意識を自然に理解できる
- アンチパターン→講義→対策という明確な構成
- 1章あたり数ページ〜十数ページの読みやすい分量
- 関連する章が隣接する論理的な章立て
主な学び
1. 論理設計における重要なアンチパターン
失われた事実(第2章)
具体例
- 消費税率変更時の払い戻し処理の失敗
- 商品価格変更による売上データとの不整合
重要なポイント
- RDBは「時間軸と直交する設計」が重要
- 履歴情報の保存方法の検討が必要
- テーブル内での履歴管理
- アプリケーションログの活用
フラグの闇(第5章)
具体例
- 論理削除フラグの使用
問題点
- クエリの複雑化
- UNIQUE制約の制限
- インデックスの非効率性
対策
- 事実のみを保存する設計
- テーブルの分割(現行/削除済み)
- トリガーの活用
隠された状態(第7章)
具体例
- IDの先頭桁による管理者判別
- EAV(Entity-Attribute-Value)パターン
- ポリモーフィック関連
対策
- 意味の複数あるカラムの分割
- 交差テーブルによる関連の整理
2. 運用面での重要な知見
バックアップ戦略(第10章)
- バックアップのリストア練習の重要性
- ステージング環境の定期的な再構築
ログ管理(第11章)
- 適切なログ出力の設計
- エラーログの監視体制
- スロークエリの定期的な分析
監視体制(第12章)
- 死活監視・チェック監視・メトリクス監視の目的明確化
- 監視の責任者と頻度の設定
バージョン管理(第19章)
- バージョン固定の理由の明確化
- メジャーバージョンアップのメリット説明
- バージョンアップ文化の醸成
3. キャッシュ戦略の多様性
キャッシュの落とし穴(第16章)
実装レイヤー
- クエリキャッシュ
- マテリアライズド・ビュー
- アプリケーションキャッシュ(Redis等)
- CDN/HTTPアクセラレーター
注意点
- デバッグの難しさ
- 状態管理の複雑さ
- 適切な使用場面の判断
4. 開発におけるトレードオフ
クエリの複雑さ(第17章)
- シンプルなクエリの組み合わせ
- SQLの読み解き方
- FROM/ON/JOIN句
- WHERE句
- GROUP BY/HAVING句
- SELECT句
- DISTINCT/ORDER BY/LIMIT句
フレームワークとの向き合い方(第20章)
- インピーダンスミスマッチの理解
- ORMの限界認識
- リポジトリパターンなどの代替手段
まとめ
データベースはアプリケーションよりも長い寿命を持つことが多いため、設計や運用における判断は慎重に行う必要があります。本書で学んだアンチパターンを避けつつ、保守性を重視した判断を心がけていきたいと思います。
特に印象に残ったのは、一見すると便利そうな設計や実装が、実は将来的な問題を引き起こす可能性があるということです。これらの知見を活かし、より良いデータベース設計と運用を目指していきたいと思います。