たなしょのメモ

日々勉強していることをつらつらと

達人に学ぶDB設計を読んだので所感

達人に学ぶDB設計を読んだので所感を書いていきたいと思います。
日ごろ何気なく使っているDBについて深く学ぶことができたのでとてもいい本でした。
会社の同僚にも勧めてみたいと思います。

1章

データとは何か、なぜデータベースが必要なのか、本書で学んでいくことについて書かれていました。
概念スキーマの話は分かりやすくて理解できてない部分の補完になりました。
「最初にデータがあり、次にプログラムがある」という考えたは普段何気なくツールを作ってしまう自分には刺さる言葉でした。ちゃんとデータから考えないとなーと改めて思いました。
またDBMSのマニュアルを熟読することがDBの勉強になるらしいので機会があれば読んでみたいと思います。

2章

物理設計周りの説明がされていました。
RAIDの説明と各種バックアップの説明にページが割かれていてその二つのトピックの学習によかったです。
RIADやバックアップの選択は全てトレードオフの関係にあること、本書を読んでいくと「トレードオフ」とい言葉が多く散見されますが、それくらいDBの物理層というのものはシビアな関係なのだと思いました。

3章

テーブル定義や正規系の話がメインでした。
特に正規化の方法を説明してる箇所はとても分かりやすく記載されていたので、今後も読みかえすと思います。
テーブル名は複数形や複数名詞で書くことや外部キーは親子関係なのでこのデータから先に削除することなど知らなかったことが多く学べる章でした。

4章

ER図の記法について書かれていました。
資格の勉強の際に一通り覚えていたので復習になりました。

5章

正規化と非正規化のメリットデメリットについて書かれていました。
「正規化は可能な限り高次にすることが大原則」ですが、正規化をするとテーブルを分割するのでJOIN句が増えてしまい検索パフォーマンスは落ちる。
それでも非正規化が最後の手段として取っておき、別の方法でパフォーマンスを向上させた方がよいとのことでした。
余談になりますがSQLを考えるときのコツとして「FROM→WHERE→GROUP BYの順で考えたほうが簡単」と記載があり確かになーと膝を打ちました。

6章

統計情報とインデックスについて書かれていました。
B-treeインデックスが一番ポピュラーであることやデータ量が少ない場合はインデックスが意味がないこと、インデックスを貼った値は単体で検索させるなど、今までインデックスについて曖昧にしか理解してなかったのでとても勉強になりました。
統計情報についても全く知らなかったので各データに行きつくまでの地図だという解釈ができただけでも良かったです。

7章

テーブル設計のバッドノウハウについて学びました。
悪いテーブル設計というのは「何も考えてない」から生まれることと記載がありその通りだと思いました。
バッドノウハウというのは列の意味を決めたら変更しないことや単一参照テーブルを作成しないことなどがあげられるみたいでした。
1~6章で学んだこともそうなのですが、何よりも「よく考えて」テーブルを設計するのが大事だと思いました。

8章

グレーケースについて記載がありました。
グレーケースの例が何点かあったのですが、一番衝撃を受けたのはオートインクリメントは主キーとしては使わない方がよく、あくまで代理キーとして運用するべきだという考え方でした。
自分でなにかアプリを作成する際は主キーをオートインクリメントではなく固定長のデータにしようと思いました。
また、ビューはSELECT文の書かれたファイルなので、ビューにSELECT文を投げるということは2回SELEC文を投げていることになることも初めて知りました。

9章

木構造のデータをリレーショナルデータベースに格納する方法について記載がありました。
今までは隣接リストモデルしか知らなかったのですが、入れ子集合モデルや入れ子区間モデルなどのモデルが存在することを知りました。
中でも入れ子区間モデルが更新処理のパフォーマンスがよいそうです。
木構造のデータを見たことがないので全体的にイメージがわきにくかったです。

まとめ

今まで何も考えてなく既存の踏襲という方法でテーブルを設計していたことを痛感しました。
特に正規化やバッドノウハウについて知れたので次回テーブル設計をするときやテーブルをレビューするときは参考にしたいです。
最後にDBとは関係ないのですが「上級レベルのことを学ぶには英語が必要だと」という文言はまさに通りだと思いました。今後も英語の研鑽も頑張っていきたいです。