【読書log】理論から学ぶデータベース実践入門 – リレーショナルモデルによる効率的なSQL:第13章〜第14章

読書log

育児本を購入しに行った書店で見つけた「理論から学ぶデータベース実践入門 – リレーショナルモデルによる効率的なSQL」という本の読書logの続きです!

私の備忘録として、勉強になった内容と個人的な感想をまとめています。

あくまでも備忘録なので、詳しく勉強したい方は実際に書籍を手に取ってみてください🙇‍♀️

※イタリック体の文字は私の感想です。

第13章 リファクタリングの最適解

  • アジャイル的な開発では、アプリケーションのソースコードだけではなく、DBのリファクタリングも反復的に実施する。
    • アプリケーションが複雑でリファクタリングに時間を要する場合は、変更前後両方のスキーマを並列で運用する方法もある。

→私が過去に参画したアジャイル開発では、DBは設計当初からあまり修正しない傾向にあったので、今後は積極的にDBのリファクタリングも提案しようと思いました。

  • リファクタリングの種類として、インデックスの追加・削除、カラム名の変更、NOT NULL制約の導入、主キーの定義変更、無損失分解、テーブルの垂直分割と統合、について解説されている。

→各種の注意点等も書籍に記載されており、概要を把握するのに非常に役に立ちます。個人的に、関連テーブルは業務で作成する機会が多いですね。

  • リファクタリングに強い設計、リファクタリングが発生しづらい設計にするために、以下の方法を組み込む。
    • DB設計初期から、正規化と直交化を実施する。
    • カラムを追加する代わりに、テーブルを追加する。
    • SELECT * の利用を避け、具体的なカラム名を指定する。
    • アプリケーション内でDBにアクセスする機能を切り出し、疎結合にする。

→特に、カラム追加の代わりにテーブル追加をする方法は、もっと積極的に利用してみようと思いました。

第14章 トランザクションの本質

  • トランザクションはDBに限られた概念ではなく、トランザクション理論自体は独立した理論体系である。
    • ACIDを満たすものは、トランザクションを実装しているといえる。
    • 提供される機能は、同時実行制御とクラッシュリカバリの2点。
    • RDBでは、ロッキングスケジューラが一般的に利用される。

→トランザクション理論がDBとは別の概念というのは初耳でした。参考図書も面白そうです。

  • 異常の種類
    • ロストアップデート、インコンシステンスリード、ダーティリード、ノンリピータブルリード、ファントムリード

→抽象化をして考えると、DBに限らず共通の資源に複数の利用者がアクセスする場合には発生する可能性がありますね。

  • MVCC(MultiVersion Concurrency Control)を利用することで、別のトランザクションが更新前の古いバージョンのデータを参照できる。
    • インコンシステントリードを防げる。

→意識して利用したことはないが、実は利用している製品に実装されているのかも。

  • データの一貫性によっては、RDBの機能だけではチェックが容易でないものもある。
    • 子テーブルに存在するキーと同じ値のキーが、複数の親テーブルのうちいずれかに存在する
    • 子テーブルに存在するキーと同じ値のキーが、複数の親テーブルのうちいずれか1つだけに存在する
    • 子テーブルに存在するキーと同じ値のキーが、複数の親テーブルのうちN個異常に存在する
  • アプリケーション側でトランザクション内で一貫性をチェックして、NGであれば明示的にロールバックする方法が良い。

→RDBのみに拘らず、適材適所で機能を活用することが大事ですね。

ここまでの感想

DBのリファクタリングは後回しになりがちですが、労力と効果を考慮した上で積極的に取り入れていこうと思いました。

また、最初のDB設計の段階からリファクタリングが発生しづらい設計にすることが必要ですね。

トランザクションはDBに限らない概念であることは、初めて知りました。ファントムリード等は、DBスペシャリストで勉強した内容の良い復習になりました。

RDB・バックエンドのロジック・フロントエンドのロジックなど、各々のメリットを活かした実装ができるように、自分の経験が浅い分野についても勉強をしたくなりました!

書籍全体まとめ

内容について

RDBと周辺機能(インデックスやトランザクション)のあるべき姿や設計方針の基礎を、ご自身の業務でのDB設計やSQL実装と紐付けながら勉強したい方にとっては、良書だと思います。

私が本書を手に取った目的とは完全に一致していたので、個人的には非常に満足しています!

一方で、理論の深いところまで勉強したい方や、すぐに実装に活かしたい方(実際にどのようなSQLを書くべきかや、どのように使うか)にとっては、物足りないかもしれません。

また、前半は集合論や論理学の話がメインなので、過去にこれらに触れたことがない方は前半で脱落する可能性も否めません。

書き方について

読み手によらず解釈が一致するようにするためだと思いますが、文章が冗長な箇所も散見されます。

私にとっては、複数の解釈を挟む余地がなくなるので助かるのですが、この冗長な表現が苦手な人もいると思います。

本文に対応する図や表が明記されているので、一見難しそうな内容でも丁寧に読めば理解できるようになっているのは、この書籍の非常に良い点です。

一方で、図や表が本文と離れた場所に載っていることがあるので、若干見づらい箇所がありました。

まとめ

読者が知りたい情報と、冗長な文章に対する苦手意識によって、読者を選ぶ書籍だと感じました。

そのため、私個人としては満足できる書籍でしたが、amazonで評価が分かれていることにも納得です。

※「⊃(包含、IMP)」に関しては、私もモヤっとしました笑

以上

タイトルとURLをコピーしました