さわらの技術ブログ

ITに関する勉強の中で学んだことをアウトプットする場です!

「達人に学ぶDB設計」を読んで

はじめに

『達人に学ぶDB設計 徹底指南書』を読み終えたので、本書から得られた知識や感想を共有したいと思います。

良かった点

データ指向アプローチ(DOA)の重要性

『達人に学ぶDB設計 徹底指南書』では、データ指向アプローチ(DOA)の重要性を、実践的な視点から深く掘り下げています。特に、データベース設計の初期段階でのデータ中心の考え方が、プロジェクトの効率性と成功にどれだけ影響を与えるかを具体的な例と共に解説しており、このアプローチがいかに現代のデータベース設計において重要かを理解するのに大いに役立ちました。

正規化のプロセス

本書は理論と実践のバランスが取れており、特に実際のデータベース設計における正規化のプロセスの説明が秀逸です。正規化の様々な段階(第1正規形から第3正規形まで)と、それらが実際のデータ整合性と性能にどのように影響するかが、豊富な例と共に説明されています。これにより、理論的な知識を実務に応用する際のガイドラインが明確になりました。

学んだ点

3層スキーマの理解

本書を通じて、3層スキーマ(外部スキーマ、概念スキーマ、内部スキーマ)の概念が明確になりました。各レイヤーの目的と機能について詳細な説明があり、特に外部スキーマユーザーインターフェースの設計にどう影響するか、概念スキーマが全体のデータモデルをどう表現するか、内部スキーマが実際のデータストレージと性能最適化をどう扱うかが理解できました。

論理設計と物理設計

論理設計と物理設計の違いについても、役立つ知識を得ることができました。論理設計ではデータモデルの構造とデータ間の関連性をどう定義するか、物理設計ではこれらのデータモデルをデータベースシステム内でどのように効率的に実装するかに焦点を当てた説明があり、データベース設計の各段階での具体的な作業内容と目的が理解できました。

難しかった点

正規化と非正規化のバランス

正規化と非正規化のバランスの取り方は、特に理解するのに時間がかかりました。データの整合性を保ちながら、効率的なアクセスパフォーマンスをどう確保するかは複雑な問題だと思いました。本書では、データベースの性能と整合性のトレードオフを詳細に解説し、実際のデータベース設計においてこれらの概念をどのようにバランスさせるべきかについての具体的なガイドラインを勉強することができました。

SQLでの木構造の扱い方

本書を読んで、特に難しいと感じたのは、一歩進んだ論理設計としてのSQLでの木構造の扱い方でした。木構造はデータベース内で階層関係を表現するのに重要な概念ですが、リレーショナルデータベースでこれを表現するには特別なテクニックが求められることを学びました。本書ではこの複雑なトピックに触れ、具体的なSQLクエリの例を示しながら解説しているものの、私にとっては初めてのトピックであり、理解するのが難しかったです。

「スッキリわかるSQL入門」を読んで

はじめに

「スッキリわかるSQL入門」を読了したので、感想を書いていきたいと思います。

良かったところ

環境構築が不要であること

プログラミングやSQLの学習参考書などではどうしても環境構築というものが必須となりますが、本書ではdokoQLというサイトが付属で使用でき、ブラウザでSQLを実行できる環境が最初から整っているのですごく親切だなと感じました。初心者にとっては環境構築でつまずくことも多いので、環境構築が不要な点は本書の最大のおすすめポイントです。

RDBMSに依存しない汎用的なSQLを学ぶことができること

RDBMSリレーショナルデータベース管理システム)といえば、MMySQL、PostgreSQLMariaDBMicrosoft SQL ServerOracle Database など様々のものがありますが、それぞれの製品に依存しない汎用的なSQLを学ぶことができるのは本書の良い点だと思います。もちろん、プロジェクトによっていずれかの製品を使用することになるので、その製品独自の記法を覚えることも必要にはなりますが、その前に汎用的なSQLを習得できることは自身の理解の核になるものなので、本書はSQLの入門本としてはピッタリだなと感じました。

学んだこと

トランザクション

トランザクションの中でも様々な種類があることはあまり意識したことはなかったので、非常に勉強になりました。実際にアプリケーションを作成する場合はSQLやバックエンド側でトランザクションをどのように制御するかを実装をしていく中で考えていくことになると思うので、SQLの入門本でトランザクションの分野まで勉強できることは本書のおすすめポイントの一つです。

難しかったこと

テーブルの設計

SQLは業務でも使用しておりますが、テーブルの設計の経験はあまりないため、本書の「第12章 テーブルの設計」は少し難しかったです。しかし、データベースの設計作業として、概念設計→論理設計→物理設計という流れの中でそれぞれどのような作業を行うのかをイメージすることができるようになりました。本書はあくまでもSQLの入門本となるのdで、詳しいテーブルの設計についてはまた別の書籍で学習する予定ですが、テーブルの設計にまで踏み込んでいるのは流石だなと感じました。

「プロを目指す人のためのRuby入門」を読んで

巷でチェリー本と呼ばれている「プロを目指す人のためのRuby入門」を読み終えましたので、その感想を書いていきたいと思います。

良かったところ

単なる文法の説明だけではなく、使用頻度も含めて説明されていたこと

文法の説明の中で実際によく使用するものや滅多に使用しないものなどの頻度も合わせて説明されていたので、文法を覚えるにあたってしっかり覚えないといけないものとそうでないものの切り分けができたので良かったです。 例えば、Rubyにはメソッドの定義をundefキーワードを使用する頃で後から削除することができるのですが、こちらは頻繁に使う機能ではないという説明をされていました。

class User
 # freezeメソッドの定義を削除する
 undef freeze
end
user = User.new
# freezeメソッドを呼び出すとエラーになる
user.freeze #=> undefined method `freeze' for #<User:0x000000013d2e3f40> (NoMethodError)

このように重点的に学習する箇所を絞ることができるのはこの本の良いところだと思いました。

他の言語と比較して説明されていたこと

文法の説明をする際に、JavaScriptJavaなどの他のプログラミング言語を引き合いに出してRuby以外ならどのように書くかが示されていたので、イメージすることができました。 例えば、「定数」の説明だとRubyではメソッドの内部で定数を定義できないのでトップレベルで定義する必要があるということを以下のようにJavaScriptを引き合いに出して説明されていたので、JavaScriptを勉強したことがある身としてはスッと理解することができました。

// JavaScriptの場合
function foo() {
 // 関数内で定数barを定義する
 const bar = 123;

 return bar * 10;
}
def foo
 # メソッドの内部で定数を定義しようとすると構文エラーになる
 BAR = 123

 BAR * 10
end
#=> dynamic constant assignment(SyntaxError)
#  BAR = 123
# ^~~

学んだところ

Rubyの文法が500ページにも渡って丁寧に説明されているので、その全てで学びはありましたが、特に印象に残っているものをピックアップしてみました。

テストを自動化する

テストの自動化というとハードルが高いイメージがあると思うのですが、この本では第3章というかなり序盤にテストを自動化する方法が説明されています。実際にコーディングをしていく上で避けては通れないテストに触れ、自動テストの導入や実行の仕方を学ぶことができるのはこの本ならではの良さだと思いました。

正規表現

正規表現といえば今まで自分自身も曖昧な理解で使用していたものでしたが、この本では1章丸々正規表現に割かれているのでかなり正規表現に対する理解を深めることができました。また、この本だけではなく著者のQiitaの正規表現のハンズオンも一緒に行うことができる点も非常に良かったです。 この章を読むことで以下のような文章から正規表現を使用して「ear」という単語を抜き出すこともできるようになります。

sounds that are pleasing to the ear.
ear is the organ of the sense of hearing.
I can't bear it.
Why on earth would anyone feel sorry for you?

難しかったところ

クラスに関する高度な話題

第7章の「クラスの作成を理解する」の中の「クラス定義やRubyの言語仕様に関する高度な話題」という中級者以上向けの発展的な内容は少し難しかったので、適宜復習をしていきたいと考えています。

AWS実務未経験者が2ヶ月でAWS SAA-C03に合格した話

先日、AWS Certified Solutions Architect - AssociateのC03の認定試験に無事合格したので勉強法や感想を振り返っていきます。

結果

736点

合格点は720点なのでかなりギリギリでした笑

勉強期間

2ヶ月

勉強の流れ

  1. UdemyのAWS SAA対策講座受講して試験範囲であるサービスのハンズオンを実施、全体の概要を掴む。
  2. TechStockの101以降を3周やる、自信を持って解答できない問題をお気に入り登録し、解説を読み込んだりPing-tのAWS SAAの各分野の解説を読む。
  3. お気に入りの問題を周回し、キリのいいところで模試演習に移る。 4. 模試を解き、間違えた問題をお気に入り登録し、間違えた問題の分野を重点的に復習する。(最終的に模試は6回解きました)

使用した教材

1.Udemyの講座:【SAA-C03版】これだけでOK! AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座
2.TechStock
3.Ping-t(各分野の解説をまとめてNotionにコピペしたものをPDF化してGoodNotesで開いて教科書代わりにすると辞書代わりにできるのでオススメです!)

感想と反省 

TechStockの合格体験記で他の方が仰っているようにTechStock#90以降の問題を3周くらいすると頭に内容が定着すると思います。自分は問題を解いてる際にキーワードで答えを割り出している節があったので、理解が不足している部分があり、点数がギリギリ合格点になったため解説までしっかり読んで各サービスを理解することが重要だと感じました。 模試では平均で90%くらいは取れていたのですが、本番はギリギリだったのでワードのみで暗記するのは危険なんだなと認識しました。時間に余裕がある方はハンズオンの時間を増やしたり、AWS公式のBlackBeltを読んでみると余裕ある点数で合格できるかと思います!

余談

試験終了後の画面にすぐに試験結果が出ると聞いていたのですが、出ませんでした。どうやらC03からは結果がすぐに出ないようになったらしく、私の場合は6時間後くらいに認定バッジのメールがきて合格を知りました。