クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

システムの図の描き方

このレッスンのあとで: システムの部品とつながりを、図で描ける。

55分のレッスンコマンド6件PostgreSQL と PostgREST のラボ:ブラウザーで学ぶデータベースと REST API

モデルとは何か

モデルとは、システムの大事な部分だけを取り出して、図で表したものです。図があると、文章だけでは見えない、部品どうしのつながりが分かります。

図書館の貸出システムを例にします。会員、本、貸出の関係を図に描き、同じ関係をデータベースで確かめます。

このレッスンのゴール

メモ

システムの部品とつながりを、図で描ける。

重要な言葉

ことばいみれい
モデルシステムの大事な部分だけを表した図や表
エンティティシステムが覚えておく、ものや出来事会員、本、貸出
関連エンティティどうしのつながり
多重度1つが、いくつと結ばれるか1対多
クラス図エンティティと関連を描く図
シーケンス図やり取りを、時間の順に描く図

学生が入力するセルは、このプレビューでは空白です。

図には、ものとつながりを描く

最初に、システムが覚えておくエンティティを探します。貸出システムでは、会員、本、貸出です。

次に、エンティティどうしの関連を線で結び、多重度を添えます。1人の会員は、何回も借りられます。これを「1対多」と呼びます。

矢印と数字を読む

この図は、会員1人に、貸出が0個以上つながると読みます。「*」は「いくつでも」の印です。

本も同じです。1冊の本は、何度も貸し出されます。貸出1件は、会員1人と本1冊を指します。

シーケンス図はやり取りの順を描く

クラス図は、ものの形を描きます。やり取りの順を描くのは、シーケンス図です。上から下へ時間が進みます。

学生が貸出を頼むと、API がデータベースに頼み、結果が戻ります。返事は、成功なら201、断られたら409です。

図の関連を、動く表で確かめる

ラボに、図と同じ形の3つの表を作ります。貸出の表は、会員と本を指す番号を持ちます。

存在しない会員の貸出を頼むと、関連の決まりが守られるかが見えます。順に Run してください。

図と同じ3つの表を作る

コマンド
PGPASSWORD=shop psql -h db -U shop -c "drop table if exists checkouts, books, members; create table members (id serial primary key, name text not null); create table books (id serial primary key, title text not null); create table checkouts (id serial primary key, member_id int not null references members(id), book_id int not null references books(id)); insert into members (name) values ('Sato'), ('Suzuki'); insert into books (title) values ('Databases'), ('Networks'); insert into checkouts (member_id, book_id) values (1, 1), (2, 2)"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

API に読み直させる

コマンド
PGPASSWORD=shop psql -h db -U shop -c "notify pgrst, 'reload schema'"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

貸出の表の列を読む

コマンド
PGPASSWORD=shop psql -h db -U shop -c "select column_name, data_type from information_schema.columns where table_name = 'checkouts' order by ordinal_position"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

正しい会員の貸出を足す

コマンド
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"member_id":1,"book_id":2}' "http://api:3000/checkouts"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

いない会員の貸出を足す

コマンド
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"member_id":99,"book_id":1}' "http://api:3000/checkouts"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

貸出と会員の名前を一緒に読む

コマンド
curl -s -w "\n" "http://api:3000/checkouts?select=id,members(name)&order=id"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

図は、できるだけ細かく描くほどよいと考えがちです。細かすぎる図は、誰も読みません。図の目的に必要なエンティティと関連だけを描きます。

例: 図とデータベースの対応

図にあるものデータベースでは確かめた Run
エンティティ Member表 members3つの表を作る
関連 Member と Checkout貸出の member_id の外部キーいない会員の貸出が409
多重度 1対多1人の会員に、貸出の行がいくつも付く会員の名前を一緒に読む

学生が入力するセルは、このプレビューでは空白です。

このラボとソースについて: PostgreSQL と PostgREST のラボ:ブラウザーで学ぶデータベースと REST API

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。