MySQL と phpMyAdmin のラボ:ショップのデータベースで SQL を練習する

このラボは、各生徒に専用の MySQL サーバーと、すでにサインイン済みの専用 phpMyAdmin を渡すので、同じテーブルをターミナルから SQL で変更し、ブラウザーで眺められます。練習用のサンプルデータベース shop から始まります。小さなオンラインショップの顧客、商品、注文、レビューで、8つのテーブルに数百行が入っています。

生徒が学ぶこと

最初の SELECT から、結合、グループ化、一致しない行を探す LEFT JOIN、自己結合、サブクエリ、ビュー、ROLLBACK を使ったトランザクションまでの SQL です。データには見つけるものがあるように作られています。一度も注文していない顧客、一度も売れていない商品、欠けた値です。phpMyAdmin のデザイナーで、テーブルのつながりを図で見られます。

クエリだけでなく、データベースの中で自分が誰なのかも学びます。student アカウントは shop と、名前が student_ で始まるデータベースを所有するので、CREATE DATABASE student_notes は通り、CREATE DATABASE other は拒否され、SHOW GRANTS でその理由がわかります。mariadb-dump でバックアップを取り、復元もします。

shop データベース

8つのテーブルがあります。categories、suppliers、products、customers、employees、orders、order_items、reviews で、キーと外部キーが全体に設定されています。リポジトリの README にある演習は、50ポンドを超える商品を高い順に出すものから始まり、カテゴリーごとの売上、一度も注文していない顧客、グラフ用の月ごとの注文数まで続きます。

ブラウザーで動かす

データベースユーザーは student で、パスワードは student です。

  1. コンテナーのページを開く. バーの「つくる」を開き、「コンテナーを実行」を選びます。ページは誰でも開けて、Git ラボと SQL ラボはアカウントなしで起動できます。ほかのラボには無料アカウントが必要です。アカウントを作成してサインインし、「起動」を押します。
  2. ラボを探す. 「サンプルラボ」のカードにすべてのサンプルが並んでいます。phpMyAdmin 付きの MySQLを探します。
  3. 「起動」を押す. 「起動」はそのまま1回の操作で実行します。「先にファイルを編集」は compose ファイルを開くので、起動する前に変更できます。
  4. 開く. ラボのページの「ブラウザーで」で phpMyAdmin を押すと、サインインした状態で開き、左に shop があります。ターミナルでは、まずクライアントにサーバー自身の証明書を受け入れるよう一度だけ指定してから、mariadb -h db -u student -pstudent shop でセッションを開きます。正確な行は README にあります。

GitHub のコード

compose ファイル1つで、サンプルデータもその中に書かれています。プッシュのたびに、プラットフォームと同じ方法でラボを起動するテストで確認されます。データを変えたい場合はフォークしてください。

このラボの基本レッスン

SQL Basics と SQL Basics 2 は、このラボで進める小さなレッスンで、各手順に説明と、生徒のターミナルにコマンドを入力する「実行」ボタンが付いています。SQL Basics では shop データベースに新しいテーブルを追加し、行の挿入、選択、結合、更新、削除を行います。SQL Basics 2 では、数える、グループ化する、一度も注文していない顧客を探すなど、多くの行にまとめて問い合わせます。

無料の個人アカウントには、ホームにある Basics モジュールで配布されます。どの学校もライブラリの Basics フォルダから自分のモジュールにコピーでき、新しい学校ではサンプルモジュールの Database (Sample) に入っています。どちらも意図的に小さくしてあり、ラボで進めるレッスンとは何かを教員に見せるためのもので、残りはラボが担います。変更したい場合は、どちらかを自分のモジュールにコピーしてください。

課題として出す

README の演習をクラスに出すか、shop に対して自分で演習を書いてください。

  1. ラボを作る. モジュールで課題を追加し、「コンテナーラボ」のカードを選んでから「GitHub リポジトリ」を選びます。https://github.com/mitsurutech/lab-mysql-phpmyadmin とブランチ main を指定します。compose ファイルは既定の compose.yaml です。変更したい場合は、先にリポジトリをフォークしてください。
  2. 公開して試す. 「公開」すると、確認したコミットに固定されるので、あとでリポジトリを変更しても、すでに出したラボは変わりません。まず自分のコピーを起動してください。
  3. 配布する. ほかの課題と同じように配布します。期限を付けることもでき、課題には何をするか、何を提出するかを書いておきます。
  4. 提出物を採点する. 生徒のコピーを開いて提出された内容を確認し、採点します。足りない場合は理由を書いて差し戻します。

よくある質問

生徒は自分のデータベースを作れますか?
はい。名前が student_ で始まるものなら作れます。student アカウントが所有するのは shop とそれらだけです。違いを見せるために、パスワードが root の root アカウントも用意されています。
データは残りますか?
はい。MySQL は名前付きボリューム mysqldata にファイルを置き、プラットフォームがそれを保存するので、生徒が作ったテーブルは次のセッションにも残ります。ラボは、ラボが保存できる容量に収まるよう作られています。
サンプルの shop データベースには何が入っていますか?
小さなオンラインショップの 8 つのテーブルで、すべてにキーと外部キーがあります。categories、suppliers、products、customers、employees、orders、order_items、reviews で、合わせて数百行です。リポジトリの README に 13 問の SQL 演習があり、一度も注文していない顧客のように、見つけるものがあるようにデータが書かれています。