社内SQL研修のために作った資料を公開します

こんにちは、Development Teamの三宅です。

先日、社内(AI事業本部内)でSQL研修の講師を担当したので、今回はその内容について簡単に共有したいと思います。

はじめに

例年、AI事業本部では、新卒エンジニアの育成のためにソフトウェアエンジニア研修を行っております。今年はフルリモートでの実施となりました。研修期間は2週間ほどで、内容は前半が講義、後半が実践(チーム開発)でした。私が担当したのは、講義パートの一部であるSQL研修です。SQLやRDBにあまり慣れていない人でも、できるだけ体系的な学びが得られるようにすることを目標に、様々な資料をまとめて提供する方針で準備しました。結果的には、ハンズオン込みで4時間ほどのやや長い講義となりましたが、勉強になったという声も頂けたのでやって良かったと思っています。

研修資料

研修内容

SQL研修の内容は、基本的には大学のデータベース講義で取り上げられるような基礎的なものです。まずは「データベースとは」という問いから始まり、簡単なRDBMSの歴史を振り返りました。ここでは特に、リレーショナルモデルとデータ独立性の関係について強調しました。次のセクションでは、SQLの根幹にあたるSELECT文を中心に説明し、簡単なSQLドリルをやってもらいました。その後は、RDBMSの主要な機能であるACIDトランザクション。特に、意味が曖昧になりがちな分離性とACIDの中で唯一アプリケーションの特性である一貫性に関して重点を置きました。

画像に alt 属性が指定されていません。ファイル名: 36fba809b9bae8ad69f9a433c0512ced.png

トランザクションが終わると、 データベース設計に移ります。ここでは、DB設計手順の概要を話した後に、まずは、概念設計で主流なERモデルをハンズオン付きで学んでもらい、続けて論理設計。ER図からRDBスキーマへの変換方法と正規化(BCNFまで)について話しました。

物理設計では、大抵のDBMSに用意されている、検索の高速化チューニングの1つであるインデックスに関して触れました。B+Treeを体験してもらったり、インデックス設計で重要なカーディナリティについても軽く言及しました。

そして、DB設計の後、インデックスが効いているかどうかを知る上でも重要な実行計画について説明しました。ここでは、実行計画を作成するクエリ評価エンジンの立ち位置を把握することと、今まで見てきたものの繋がりを強化するために軽くDBMSのアーキテクチャに触れました。実行計画のハンズオンは、様々なインデックスを定義する前後で、実行計画がどう変化するかを見てもらうような形式をとりました。

最後のセクションは、SQL IIと第して、サブクエリとCASE式を軽く見ていきました。ここは研修時間を調整することを目的に作りました。

最後に

研修の資料作りと実際のリモート研修を通して、私自身学んだことが非常に多かったです。まだまだブラッシュアップが必要なところがありますが、今回まとめた資料が、SQLやRDBを学んでいる方に少しでもお役に立てましたら幸いです。