はじめに
今回は前回に続きSQLを学びます。
前回は『スッキリわかる入門シリーズ』でSQLを学びました。
前回の記事内でも触れましたが、DB設計については理解不足を感じていました。
そこで今回は8月28日に第2版が出版された、『達人に学ぶDB設計徹底指南書 第2版』でDB設計について学んでいきます。
初版との違い
まず初版との違いですが、第2版は初版から45ページ増えて、392ページになっています。
追加されている項目をまとめると以下の通りです。
- 第2章 論理設計と物理設計
- 第6章 データベースとパフォーマンス
- 6-5 インデックス以外のチューニング手段
- 第7章 論理設計のアンチパターン(旧:論理設計のバットノウハウ)
- 7-8 ゾンビマートと多段マート
- 第9章 一歩進んだ論理設計
よかったところ
クラウドにおけるデータベースの冗長構成
複数のディスクに同じデータを書き込んで冗長化することでデータを保全できるようにする概念であるRAID(Redundant Array of Independent Disks)について前段で詳しい説明があります。
その後、AWSを例に、マルチAZ(Availability Zone)という構成についてことで可用性を高める方法や、マルチリージョンによる災害対策についても触れられています。
それぞれのアーキテクチャが図解されているため、非常にわかりやすい構成となっています。
クラウドにおけるデータベースを学ぶだけでなく、その中で災害対策としての冗長構成についても学ぶことが可能です。
論理設計の4つのステップ
論理設計の4つのステップについては、第2版からの追加ではありません。ただ説明が簡潔で、初学者にも理解しやすかったです。
4つのステップは以下の流れとなっています。
- エンティティの抽出
- エンティティの定義
- 正規化
- ER図の正規化
物理設計の5つのステップ
続いては物理設計の5つのステップです。
- テーブル定義
- インデックス定義
- ハードウェアのサイジング
- ストレージの冗長構成決定
- ファイルの物理配置決定
テーブル名は全て複数形または集合名詞で書ける状態になっているか、などの明確な基準の提示は初学者にとって理解しやすい内容になっていると思います。
学んだところ
アンチパターンやグレーノウハウの充実
第7章では論理設計のアンチパターンを、第8章では論理設計のグレーノウハウについて学びます。
2章分を使っていることからも論理設計ではアンチパターンやグレーノウハウへの注意がいかに必要なのか感じられます。
前段の第3章では論期設計と正規化について記載があり、正規化の手順を学ぶことができます。第3章の内容がDB設計を学ぶ上では必須項目であったり前提となったうえで、第7章や第8章の方が実践的な内容といったところでしょうか。実際にDB設計をする際に起こりうる内容を学ぶ形です。
アンチパターンとして紹介されているのは、非スカラ値(第1正規形未満)、ダブルミーニング、単一参照テーブル、テーブル分割、不適切なキー、ダブルマスタ、ゾンビマートと多段マートの7つです。
グレーノウハウとしては、代理キー、列持ちテーブル、アドホックな集計キー、多段ビューの4つが紹介されたうえで、データクレンジングの重要性についての説明もあります。
正直に言えば、アンチパターンやグレーノウハウを全て理解して、マスターできたとは到底思えません。そもそも第8章についてはグレーノウハウということで、利点と欠点を把握したうえで、どうしても必要ならば利用することもあるかと思います。そういった時に改めてリスクヘッジとして欠点を確認するというような使い方もできるかと思います。
難しかったところ
データベースとパフォーマンス
本書の内容で特に難しく感じたのは第6章データベースとパフォーマンスです。データベースのパフォーマンスを決める要因としてインデックスや統計情報について説明がされています。
パフォーマンス改善のための内容であるため、実際に手を動かしていない自分にとっては難しく感じられたのだと思います。やはり、実際にやりながらじゃないと、理解が深まらないです。2度通読しましたが、知っている、わかっている、できているでいうと知っている段階までしか進んでいないと思います。データベースを作成した後の内容でもあるので、またパフォーマンス改善が必要になった時には振り返って学び直します。
おわりに
ここまで、達人に学ぶDB設計徹底指南書 第2版でDB設計を学んだ内容を記載しました。400ページ程度あるので、本書の内容を全て理解できたわけではありませんが、繰り返し述べられている通り、論理設計が非常に重要で、特にアンチパーンには今後気をつけなければならないと感じました。また安易にグレーノウハウに手を出さないよう気をつけたいと思います。
また、もう少し大きな枠で考えてみると、第9章一歩進んだ論理設計〜RDBで木構造を扱うの最後で著者が述べているように、初版(2012年刊行)には記載されていた入れ子集合モデルと入れ子区間モデルは削除され、かつてアンチパターンとされていた隣接リストモデルが一歩進んだ論理設計として紹介されています。
そしてこれは著者も予想しなかった出来事だったようです。ここから、SQLやDB設計についての勉強にも終わりはなく、常に新しい情報を吸収しながら進歩し続ける必要があることを学びました。
今後もNewSQLなども含めて学び続けようと思います。