データベースを勉強したいあなたに送る技術書17冊(+11冊1講義7link)
これはなに
ども、レバテック開発部のもりたです。最近めっちゃ元気!!
今回は『データベースについて勉強したいあなたに送る技術書17冊(+11冊1講義7link)』として、もりたがここ半年くらいでわーっと集めたデータベース周りの書籍(とか)を紹介していきます。アプリケーションって結局はデータベースみたいなところがあると思うんですが、おれは長いことデータベースをどう学んだら良いのか分かりませんでした。同じような気持ちを抱えているITエンジニアの人もいると思うので、学習ロードマップと合わせて紹介していきます。
なお具体的な対象読者は業務でなんとなくSQL書いてるけど、ウィンドウ関数とか言われると分からんな……くらいの人です。
扱う領域と扱わない領域
- 扱う領域としてはだいたい以下
- 再入門本
- SQL
- 内部構造
- 論理設計
- 周辺知識
- データベース理論
- その他高度なもの
- モデリング、NoSQL、分散データベース、データ基盤など
- 扱ってないのは以下
- チューニング
- トランザクション
こういう視点・本もあるよってのがあったらぜひコメントください。
DB参考書のロードマップ
先にロードマップ。こんなかんじ。
(ちっちぇ〜〜のでロードマップのリンクから開いてください。)
みんなにお勧めしたいのが「再入門本」、その次に手に取りやすいのが「SQL」「内部構造」「論理設計」「周辺知識」「データベース理論」、もっと学びたい人むけには「ちょっと高度な書籍」となっています。
1. おすすめ本の紹介
1-1. 再入門
とりあえずこれ読むといいよってやつです。
『SQL実践入門』
データベースについて勉強しようとするとまずお勧めされるのがミックさんの書いた書籍です。その中でもデータベースについてのいろんな視点を与えてくれるのがこの書籍だと思っています。どうSQLチューニングするか? というテーマに沿いながら、簡単な内部構造や実行計画の読み方、基本的なSQL構文の書き方、つまりどころなどを解説しています。自分自身この書籍を読んだことがきっかけでこの先20冊くらいデータベース周りの書籍を読むことになったので、とりあえずで読んで問題意識を植え付けられる書籍として良いと思います。
1-2. SQL
いまさらSQLかよ……と思うかもしれませんが、SQLは手続型のプログラミング言語とは異なるパラダイムの言語であり、SQLを書くときは宣言型言語を書くときの考え方が必要です。ここではSQLの書き方を覚えるというよりは、SQLという宣言型言語が手続型言語とはどのように違うのか? という視点を得られる書籍を紹介します。
また、その宣言型言語を学ぶことはリレーショナルデータベースの理論を学ぶことにも繋がるため、データベース理論の入り口としての書籍も紹介します。
『達人に学ぶSQL徹底指南書』
『SQL実践入門』に続いてミックさんの書籍です。CASE式やウインドウ関数など、知ってはいるけどなかなか使えていないSQLを分かりやすく解説しています。その解説がとても分かりやすい上に、宣言型言語の考え方はもちろん、データベース理論やデータベースの歴史に自然と触れることができる良書だと思っています。またこの書籍はジョー・セルコの『プログラマのためのSQL』の解説書としての一面があり、同じくジョー・セルコの『SQLパズル』も合わせて読むとなお良いです。
『理論から学ぶデータベース実践入門』
データベース理論の入り口としての書籍です。集合論とリレーショナルデータベースがどう繋がるのか? を説明しています。Web上だと明らかな間違いがあるなど批判も受けてるんですが、SQLと集合論という観点でわりと読みやすく、導入には良い本だと思っています。
1-3. 内部構造の基礎
内部構造について解説した書籍の紹介です。内部構造は各種RDBMSにだいたい共通な点と、実装に依存する点があります。とりあえずみんなに理解しやすい一冊と、あとは代表的なRDBMSの解説書としてMySQLとPostgreSQL向けの書籍を紹介します。
『絵で見てわかるSQL Serverの仕組み』
Win向けRDBMSであるSQL Serverの内部構造を解説する書籍です。RDBMSの扱う問題領域がどんなものなのか? というのが色々分かります。本書を選んだのはその分かりやすさゆえで、イラストも程よく使われており、知識のない状態で読んでも割とすんなり理解できます。
扱うテーマの一例を出すと、データベースにおけるプロセス管理の話やインデックスの実装の話などです。
また、他のRDBMSの解説書だと、MySQLユーザー向けには『詳解MySQL5.7』、PostgreSQLユーザー向けには『内部構造から学ぶPostgreSQL設計・運用計画の鉄則』がおすすめです。MySQLの解説書としてあえて5.7のものを出すのか、と思われるかもしれませんが、『詳解MySQL5.7』の熱量はすごいのでおすすめです。『理論から学ぶデータベース実践入門』と同じ著者です。
1-4. 論理設計
論理設計では『達人に学ぶDB設計徹底指南書』『失敗から学ぶRDBの歩き方』『SQLアンチパターン』の3冊を紹介します。これらの書籍はどれも同じような問題領域を扱っていますが、ちょっとずつ解説のされ方が違っています。どれか一冊を読んで終わりというよりは、全て読んで作者同士を戦わせるとより理解が進みます。
『達人に学ぶDB設計徹底指南書』
ミックさんの書籍です。この書籍は概念スキーマや正規化などの概論的なところからパフォーマンス、そして論理設計のノウハウまでを取り扱っています。論理設計のバッドノウハウ・グレーノウハウは最後の2章のみですが、前提となる知識もまとめて学べるため初学者にもおすすめです。
『失敗から学ぶRDBの歩き方』
通称そーだい本。『SQLアンチパターン』の内容をいい感じにアップデートしてくれており、新しい『SQLアンチパターン』として読めます。また、程よい文章量で多くの事例を扱っているのでかなり読みやすいです。チームでの勉強会にもおすすめ。
『SQLアンチパターン』
いわずとしれた名著です。ただ刊行年が古く、出版当時の環境だと正しかった内容も時代がくだるにつれて誤りとなったものがあります。批判的に読む必要はありますが、その点を差し引いても名著です。
1-5. 周辺知識
データベースのことを学んでいると、プロセスとかそういう低レイヤーの知識が求められるときがあります。もりたは大学では夏目漱石とか平家物語とか妖怪のことしかやってなかったので、ここら辺はこれを機に勉強しました。概論として『プログラムはなぜ動くのか』を紹介し、データベースを学ぶ上で必要なネットワーク/ストレージ/OS周りの知識としてそれぞれ一冊ずつ挙げています。
『プログラムはなぜ動くのか?』
すごく良い本でした。基本情報技術者試験でコンピュータの基本要素は知っているけど、それがどう関わり合っているのかいまいち腹落ちしてない......という人におすすめです。コンピュータが恐ろしく単純な仕組みの上に成り立っていることが理解できます。
『基礎からの新しいストレージ入門』
2023年に出版されたストレージの解説書です。データベースの物理設計をする際に出てくる単語や論点が、ストレージというより大きな概念から説明されています。より大きな視野でデータベースを捉えるには良い書籍です。
『ふつうのLinuxプログラミング』
OSやカーネル、プロセスなどの仕組みについて学べます。単純にめちゃくちゃ面白いのでおすすめです。
『マスタリングTCP/IP入門』
駆け出しエンジニアにおすすめの書籍としてよく紹介されていますが、実際とても良い書籍です。なんだかふわっとしているネットワーク周りについてわかる書籍で、入門編なので読みやすいです。
1-6. データベース理論
データベースについて学ぶうちに理論的な背景についても学びたくなってくると思うので、理論の書籍も紹介します。
『リレーショナルデータベース入門[第3版]』
リレーショナルモデル + RDBMSについての書籍です。著者は日本データベース学会の創設者で、この書籍も大学の教科書として結構使われているらしいです。理論の書籍ですが言葉も平易で分かりやすいです。
なお理論を学ぶにあたって前提となる論理学については解説がないため、そこらへんを知りたい場合は『まったくゼロからの論理学』がおすすめです。RDBについて学ぶのに過不足ない範囲をかなりやさしく解説しています。また、データベース理論の書籍として『データベース実践講義』をおすすめする人が(有識者ほど)多い印象ですが、あんまりAmazonレビューがよくないので本書(リレーショナルデータベース入門)をおすすめしています。
筑波大学がデータベース概論の講義を公開しているので、そういうのを見てもいいかもですね。
1-7. その他の書籍
前項までが割ととっつきやすいもので、以下はもう少し発展的な内容のものを挙げています。
『詳説データベース』
ストレージエンジンと分散システムの内部構造を取り扱っています。特に分散システムの文脈でおすすめされることが多い印象で、これを読むとデータベースを自作したくなると評判です。
『モデル作成技術TM入門』
モデリング手法、事業分析についての書籍で、これもとにかく評判がいいです。論理設計本を読んだ後に読むと良いです。
『データ指向アプリケーションデザイン』
データベースの知識を前提に、どんなシステムにはどんなデータベース構造を使うか? ということが議論されています。なお著者が概要をまとめたスライドを出しているので、とりあえずそちらをみてみると良さそうです。内部構造の書籍を読んだ上でチャレンジすることをおすすめします。
『30分でわかるデータ指向アプリケーションデザイン - Data Engineering Study #18』
『24時間365日動き続けるデータシステムの設計手法 : 「データ指向アプリケーションデザイン」実践編』
『[エンジニアのための]データ分析基盤入門』
データ分析基盤についての書籍で、特定の技術に偏らず基盤についての網羅的な論点が知れるようです。どんなデータを持つべきか、という観点で面白そう。
『7つのデータベース7つの世界』
NoSQLについての書籍です。7つのオープンソースデータベースの特徴的なアーキテクチャについて学べます。タイトルはプログラミング言語の主要なパラダイムについて解説した『7つの言語-7つの世界』から。
2. 紹介しなかった分野
いくつか書籍を紹介しましたが、意図的に紹介していない分野があります。
2-1. チューニング
チューニングについてなんですが、効率的な良いSQLの書き方という点では紹介したSQL本を参考にするのが良いと考えています。その点を省くとむしろ論点は「どうやってシステムを監視しどうやって改善可能な点を見つけるか?」という点になり、データベースからはちょっと話がずれちゃうかなと思って紹介しませんでした。SQLチューニングにとどまらないパフォーマンスチューニング全体についてであれば『達人が教えるWebパフォーマンスチューニング 〜ISUCONから学ぶ高速化の実践』がおすすめです。ハンズオン環境が用意されているのも嬉しいところ。チューニングにかかわる内部構造的なところだと『SQLパフォーマンス詳解』もとても評価が良いです。お値段はちょっと高いですが、なんとWeb上で全文公開されています。また、手を動かせるよう実験用の環境を作ってくれた人がいます。ありがて〜。
追記:ここをまとめた資料を作成しました!!! ご笑覧ください〜〜〜AWS RDS/Auroraでモニタリング&チューニングを始めるための資料11選
2-2. トランザクション
トランザクションってそれだけで一冊書籍が書けちゃうんじゃないかなと思うんですが、国内だと意外と書籍を見つけられなかったため今回は紹介しませんでした。『トランザクション処理』という書籍がどうも良いらしいんですが絶版で中古もかなり値が張るみたいです。ここらへんを扱った書籍、絶対狙い目だと思うので専門の人はぜひ書いてほしいなと思います。洋書だと良い本があるみたいなので、英語でも読むぜという人は『Transactional Information Systems』と『Transaction Processing』をおすすめします。(どっちも値段高い)
なおWeb上には良い資料がいくつかあるので、以下に紹介します。
トランザクションをもっと深く知るための資料集 - ぱと隊長日誌
一人トランザクション技術 Advent Calendar 2016
マイクロサービスにおける決済トランザクション管理 - mercari engineering
おわりに
以上、17冊(+11冊1講義7link)を紹介しました。他にこんな書籍があるよ!! というおすすめがありましたら、ぜひコメントください。
追記:2024/10/1
会社のオウンドメディアにて以下の記事の編集に協力しました!
【レバテック開発部に聞いた】ITエンジニアにおすすめの本18選!
こちらでも分厚いSQLの書籍を紹介しているので、ぜひ見てみてください!
レバテック開発部の公式テックブログです! レバテック開発部 Advent Calendar 2024 実施中: qiita.com/advent-calendar/2024/levtech
Discussion