PH2 / W1 / データベースってなに?

データベースってなに?

時間割アプリの授業データは、どこにしまって、どうやって取り出すのか。このレッスンでは、その置き場所になるデータベースの形と、話しかけ方を学びます。

⇄

いまどこを学んでいる?

今回は、Laravel の奥でデータを保存しているPostgreSQLを学びます。

ブラウザURLを送る
→
Webサーバーnginx
→
Laravel処理を決める
⇄
PostgreSQLデータを保存

授業のデータはどこに?

時間割アプリの授業一覧って、どこに置けばいいんですか? JavaScript の配列に書いておけば足りそうですけど。

8件を表示するだけならそれでも動くよ。でも、学生が履修登録するたびに中身が書き換わるとしたら?

Excelではだめ?

大学の時間割は Excel で配られています。あれをアプリに置いたらどうですか?

人が開いて眺めるなら Excel は便利だね。でもアプリでは、200人が同じ表を同時に書き換えるんだ。

200人が同時に保存したら
どれが最後に残る?

データベースとは

データをしまい、探したり書き換えたりする仕事を一手に引き受ける専用のソフトをデータベースと呼びます。アプリは「これを探して」と頼むだけで済みます。

頼むことデータベースがやってくれること
探す8件でも10万件でも、条件に合う行だけを返す
同時に書く200人が一度に登録しても、表を壊さない
守る決めた種類と違う値は受け付けない

中はどんな形?

専用のソフトと聞くと、中身が想像できません。

実は、Excel の表とよく似た形をしているんだ。授業のデータを入れた表を見てみよう。

テーブル

データベースの中では、データが表の形で入っています。この表をテーブルと呼びます。授業の表には courses という名前を付けました。

テーブル:courses
idcodenameteacherday
1CS101データベース論佐藤1
2CS102プログラミング基礎鈴木2
3MA101線形代数高橋1
右に period・room・credits・required が続きます

カラム

縦の列は「授業名」「教員」のような項目です。これをカラムと呼びます。name カラムには、どの行でも授業名が入ります。

idcodenameteacherday
1CS101データベース論佐藤1
2CS102プログラミング基礎鈴木2
3MA101線形代数高橋1

レコード

横の1行は、授業1つ分のデータです。これをレコードと呼びます。授業を1つ追加すると、レコードが1行増えます。

idcodenameteacherday
1CS101データベース論佐藤1
2CS102プログラミング基礎鈴木2
3MA101線形代数高橋1

入る値の種類

カラムごとに、入れてよい値の種類(型)が決まっています。day は整数なので、「月曜」と文字で入れようとするとエラーで止められます。

カラム型入る値の例
name文字列データベース論
day整数1(月)〜 5(金)
credits整数2
required真偽値true(必修)/ false

どうやって取り出す?

月曜の授業だけ見たいとき、Excel ならフィルタのボタンを押しますよね。データベースにはボタンがありません。

代わりに、文章で命令を送るんだ。その命令の書き方を次で見ていこう。

SQLとクエリ

データベースへの命令はSQLという言葉で書きます。そして「月曜の授業をください」のような1回分の命令をクエリと呼びます。

Laravel
→クエリを送る
←結果の表が返る
PostgreSQL

クエリの例

「月曜の授業名をください」を SQL で書くと、このクエリになります。英単語が並んでいますが、1語ずつの意味は次のレッスンで見ていきます。

実行結果
name
データベース論
線形代数
query.sql
SELECT name
FROM courses
WHERE day = 1;

PostgreSQL

データベースのソフトにはいくつか種類があり、PH2 ではPostgreSQL(ポストグレス)を使います。どれも SQL で命令でき、基本の書き方はほぼ共通です。

名前よく見かける場面
PostgreSQLPH2 で使う。Webサービスで広く使われる
MySQLWebサービスで広く使われる
SQLiteスマホアプリなど。1つのファイルで動く

まとめ

  • データベースは、データの保存・検索・同時の書き換えを引き受ける専用のソフト
  • 中身はテーブル(表)。縦の列がカラム、横の1行がレコード
  • データベースへの命令は SQL で書き、1回分の命令をクエリと呼ぶ