DB関連おすすめ書籍

この記事では、私が読んできたRDB、SQL、データモデリング関連の技術書の中でよかったものをあげようとおもいます。

## [1. 失敗から学ぶRDBの正しい歩き方](https://www.amazon.co.jp/%E5%A4%B1%E6%95%97%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6RDB%E3%81%AE%E6%AD%A3%E3%81%97%E3%81%84%E6%AD%A9%E3%81%8D%E6%96%B9-Software-Design-plus-%E6%9B%BD%E6%A0%B9/dp/4297104083/ref=sr_1_1?crid=1MEM0D8LDQ2US&keywords=rdb%E3%81%AE%E6%AD%A3%E3%81%97%E3%81%84%E6%AD%A9%E3%81%8D%E6%96%B9&qid=1708173508&sprefix=RDB%E3%81%AE%2Caps%2C248&sr=8-1)

### おすすめ度 ★★★★★

こちらは、DBの設計や運用に有用な知識を、アンチパターンの解説とともに紹介するという構成になっています。

第1正規形になっていなかったり、idに一意に識別する以外の意味が存在していたり、nullばかりのカラムがあったり...といろいろな都合でわれわれが陥りがちなアンチパターンが紹介され、それらアンチパターンに陥らない方法が完結に解説されています。

DBの設計・運用ノウハウとしてきれいにまとまっていて読みやすくいい本です。

## [2. SQLアンチパターン](https://www.amazon.co.jp/SQL%E3%82%A2%E3%83%B3%E3%83%81%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3-Bill-Karwin/dp/4873115892/ref=sr_1_1?crid=JYY0OU725PJ8&keywords=sql%E3%82%A2%E3%83%B3%E3%83%81%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3&qid=1708218085&sprefix=sql%E3%82%A2%E3%83%B3%E3%83%81%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%2Caps%2C188&sr=8-1)

### おすすめ度 ★★★★★

こちらは、DB設計やSQLについて犯しがちなアンチパターンを紹介し、それらの解決策を提示するというテイストで書かれている本です。

「1.」であげた本とスタイルは似ていますが中身がよりディープなので、「1.」の次に読むとおもしろいかもしれません。

タイトルに「SQL」とはいっているとおり、以下のようなSQLに焦点をあてたアンチパターンも紹介されています。

 - LIKEや正規表現による部分文字列検索がもたらす検索の遅さ
 - SQLインジェクション
 - 修正が難しい複雑で長いSQL文

個人的には、13章で null の扱い方を解説している章がおもしろかったです。

## [3. 理論から学ぶデータベース実践入門](https://www.amazon.co.jp/%E7%90%86%E8%AB%96%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AB%E3%82%88%E3%82%8B%E5%8A%B9%E7%8E%87%E7%9A%84%E3%81%AASQL-WEB-PRESS-plus/dp/4774171972/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=O6T33BDJ36IC&keywords=%E7%90%86%E8%AB%96%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80&qid=1708220694&sprefix=%E7%90%86%E8%AB%96%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80%2Caps%2C156&sr=8-1)

### おすすめ度 ★★★★★

こちらは、RDBの教科書的な本でもあり、後半ではDBの設計についても解説している本です。

どれか一冊読むならこれが良いとおもえるくらい、RDBの基本が詰まった良書です。

個人的には、**「第９章　履歴データとうまく付き合う」** がよかったです。

リレーションでデータを表現するRDBにとって、順序性が存在する履歴データの扱いは本質的に難しさをはらんでいると解説されています。

そのため、直観的に履歴データを設計すると、アプリケーション側が複雑になってしまいがちです。
そこで本章では、完璧ではないかもしれないけれど、より良い履歴データを扱う設計方法が紹介されます。

こういう知識は明日から使えていいですね。

また、**「第13章　リファクタリング」**　もいい内容です。

データベースをリファクタリングする際の具体的な手順と、ベストプラクティスについて説明されています。

具体的には、リファクタリングによってアプリ側に意図しない悪影響を及ぼさない方法について解説されており、いいノウハウだとおもいました。

個人的な経験ですと、プログラムをよりよくリファクタリングしようとして、本質的な問題がどこにあるか考えていくと、最終的にはテーブル設計を見直さないといけない、という結論にたどり着いたことがあります。

スパゲッティコードとなってしまったフロントのリファクタリングを検討したことがあるのですが、以下のような理由で、テーブル設計がある程度の水準に保てないと、アプリケーション側が非常に複雑になるんだなぁ...と痛感したことがあります。

#### かつてDBリファクタリングを検討した経緯

 1.  **フロントにドメイン知識が流出しており**、フロント側でたくさんデータの操作や判断をしてしまっていた。
 2.  この原因は、APIが返す情報が不足していたり、そもそも必要なAPIが存在しなかったりといったところにあったため、これを修正するには、フロント側で判断しなくてすむように**APIが適切な情報を返す**ようにする必要があった。
 3.  しかし、APIもスパゲッティコードと化しており、**この原因は正規化されていないテーブル**にあった。

またテーブルリファクタリングを検討する際は本章を再読しようとおもいます。

話題は逸れますが、個人的には上記の経験を通して、APIというものは情報を受け渡すことが大事なのではないと感じました。

APIにおいて重要なのは**仕様を公開する**ということ、つまり、エンジニアがそのAPIのドキュメントを見たときに、**「ああ、だいたいこんなかんじで使えばいいんだろうなあ」** とイメージできることがとても大切であり、そういう状態を目指したいと感じました。

## [4. 楽々ERDレッスン](https://www.amazon.co.jp/%E6%A5%BD%E3%80%85ERD%E3%83%AC%E3%83%83%E3%82%B9%E3%83%B3-CodeZine-BOOKS-%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%AD%E3%82%B8%E3%83%83%E3%82%AF-%E7%BE%BD%E7%94%9F/dp/4798110663/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=16RL1O5S3ON2Y&dib=eyJ2IjoiMSJ9.xlQSsdEhSw_1VZkGYJGAlhgYYrsOkY74tDEOET7Xkx3DZLod5GQ8ySfbz5Vb71Pn.tqkI66jwCGcqhdDWBsM7jfTPNVoXcd63ez9NSKGFf7A&dib_tag=se&keywords=%E6%A5%BD%E3%80%85ERD%E3%83%AC%E3%83%83%E3%82%B9%E3%83%B3&qid=1708576755&sprefix=%E6%A5%BD%E3%80%85erd%E3%83%AC%E3%83%83%E3%82%B9%E3%83%B3%2Caps%2C172&sr=8-1)

### おすすめ度 ★★★★☆

こちらは、テーブル設計に主眼をおいた解説本です。

特に後半では、実際の帳票から具体的なステップをふんでデータモデリングを解説しており、内容もわかりやすいものとなっています。

この本では、以下のような手順でモデリングしています。

1. コアとなるイベントを見つける。
2. そのイベントに関連するリソースを列挙する。
3. 項目をうめる。
4. リレーションをつける。

個人的には、まずイベントを抽出したあとで、関連するリソースを書き出していくというやり方が参考になりました。

イベントに注目しながらER図を作ると、データだけでなく業務フローを意識しながらモデリングしていくことになるので、作りやすいのかもしれません。

## [5. 事業分析・データ設計のためのモデル作成技術入門](https://www.amazon.co.jp/%E4%BA%8B%E6%A5%AD%E5%88%86%E6%9E%90%E3%83%BB%E3%83%87%E3%83%BC%E3%82%BF%E8%A8%AD%E8%A8%88%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%83%A2%E3%83%87%E3%83%AB%E4%BD%9C%E6%88%90%E6%8A%80%E8%A1%93%E5%85%A5%E9%96%80-%E4%BD%90%E8%97%A4-%E6%AD%A3%E7%BE%8E/dp/4297129469/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=252NMJLNIHB19&keywords=%E4%BA%8B%E6%A5%AD%E5%88%86%E6%9E%90%E3%83%BB%E3%83%87%E3%83%BC%E3%82%BF%E8%A8%AD%E8%A8%88%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%83%A2%E3%83%87%E3%83%AB%E4%BD%9C%E6%88%90%E6%8A%80%E8%A1%93%E5%85%A5%E9%96%80&qid=1708220835&sprefix=%E4%BA%8B%E6%A5%AD%E5%88%86%E6%9E%90+%E3%83%87%E3%83%BC%E3%82%BF%E8%A8%AD%E8%A8%88%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%83%A2%E3%83%87%E3%83%AB%E4%BD%9C%E6%88%90%E6%8A%80%E8%A1%93%E5%85%A5%E9%96%80%2Caps%2C161&sr=8-1)

### おすすめ度 ★★★★☆

こちらは、DB設計というより事業を分析するというところに力点がおかれていますが、モデリングに関する書籍です。

事業で扱うモノをイベントとリソースにわけ、それらがどういう関係にあるのかを分析する手法について書かれています。

記法や用語に慣れない部分が個人的にありましたが、各章の練習問題では、具体的な業務システムの画面を事例に、そのシステムをモデリングしていく流れが解説されています。

基本的には、事業に登場するイベント or リソースを抽出し、それらが「イベント - リソース」関係、「リソース - リソース」関係、「イベント - イベント」関係のいずれにあたるのかに注目し、透徹したルールにしたがって機械的にモデリングしていきます。

これらが最終的にどういうクラスやDBになるのかイメージしにくいところが個人的にありましたが、考え方はとても参考になりました。あと、ちゃんと正規化するのってだいじだな、と改めておもいました。

## [6. リレーショナルデータベース入門](https://www.amazon.co.jp/%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E5%85%A5%E9%96%80%E2%80%95%E3%83%87%E3%83%BC%E3%82%BF%E3%83%A2%E3%83%87%E3%83%AB%E3%83%BBSQL%E3%83%BB%E7%AE%A1%E7%90%86%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%BBNoSQL-Information-Computing-%E5%A2%97%E6%B0%B8-%E8%89%AF%E6%96%87/dp/4781913903/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1A0984CEJWNF3&keywords=%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E5%85%A5%E9%96%80&qid=1708241746&sprefix=%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E5%85%A5%E9%96%80%2Caps%2C168&sr=8-1)

### おすすめ度 ★★★☆☆

こちらは、入門とありますが非常に硬派なRDBの教科書です。

リレーショナルデータベースというもの自体を学びたいひとに向いています。

個人的には難しくて全部読むのは厳しかったので、自分がある程度理解できていると思える部分にしぼって、RDBを理論的に説明するとこうなるんだなぁ...と思いながらよみました。

正規形について記述される部分など、厳密な定義を理解しながら読めるので、頭の中で整理して理解することができたとおもいます。