いまの英語力を整理フィリピン(バギオ)留学決めました。関する基本的な事柄の説明、7〜9章が設計に関するノウハウ的な内容になっている。図、5章が非正規化、6章がインデックスやオプティマイザや実行計画に関する説明となっている。書籍名の「初級者で終わりたくないあなたへ」から、この本は中級者向けの事柄を扱ったものと想像していたが、思いの外基本的な内容が多く期待していた内容とギャップがあった。後半の設計に関するノウハウに関してはある程度常識的なものも多い。アンチパターン」という本が良かった。触れたことがある人であれば、本書はもう必要ないかもしれない。積読状態にあったものを読了したので、記憶したい内容をメモしておく。#関係には重複するレコードは存在してはならないが、表には存在しても良い。関係のレコードは上下の関係を持たないが、表の行は上から下へ順序づけられている。関係の列は左右の順序を持たないが、表の列は左から右へ順序づけられている。厳密にいうと「表」と「関係」は別物であり、上記の違いがある。このために、リレーショナルデータベース理論の開発者はリレーショナルモデルと名付けたのである。概念を説明するときには「表」を例示して説明すると最もイメージしやすいことを認めている。#正規化とデータ読み取りのパフォーマンスはトレードオフの関係にある。正規化をすることで冗長性が排除される。冗長性が排除されたデータベースでは不整合なデータが保存される可能性も低減され、さらに更新処理は高速になる(逆にいうと冗長なレコードがある場合、ある項目を更新するためにはその項目を含んだ複数の冗長なレコードを更新する必要がある)。正規化はデータベースを更新処理に対して堅牢、迅速な姿に変える。一方で、正規化されたデータベースから必要な情報を復元するためには結合(join)を多く必要とする。これはデータ読み取りのパフォーマンスを悪化させる紛れも無い原因となる。そのため意図的に正規化を巻き戻す、非正規化という考え方がある。「非正規化」はあくまでも最後の手段という姿勢で臨むべきである。要するに十分に正規化された設計をあきらめても良いのは、パフォーマンスを向上させるためのその他すべての戦略が要件を満たさない場合だけとするべきだ。データベース製品には、インデックス、パーティション、シャーディング、マテリアライズドビューなど、パフォーマンスを向上させるための色々な機能がある。非正規化を行う前に、まずはこれらの機能の使用を検討するべきだ。記述し、処理を発行する。問題があればここでエラーになる)。最適な処理手順に変換する(このとき得られた最適化手順を「実行計画」という)。実行計画に基づいて、データベースへアクセスを実行する。ような言語は(手続き型言語に対して)「宣言型」言語と呼ばれることがあるが、これはユーザが「どのように」ではなく「何を」を指定する言語であるためである。ユーザが指定した宣言は、オプティマイザが手続きに変換しているのである。クエリを発行する流れ。