[N予備校プログラミングコース] 第4章 データベース

N予備校プログラミングコース 第4章の続き。
5回に分けて、PostgreSQL を使ってデータベース(以下DB)を学習した。

DB自体は、業務でソシャゲのクライアント開発において SQLite を使ったことはあるし、また以前 CGI の勉強していた時に MySQL やその派生である MariaDB を触ったことはあるので、大体の仕組みは理解しているつもりだが、どうも SQL というのがしっくりこない。
まぁ従来のプログラミング言語とは違う、データベース言語と呼ばれるものなので、しっくりこないのも当然といえば当然なのだが。
とはいえ、DBも結局はプログラムで動いているソフトウェアだし、今時のコンシューマゲーム機なら大抵 SQLite は使える(はずだ)し、ゲームにしろ組込みにしろDBを使うことは多々あるので、いい加減ここらできっちり勉強しておかねばならないだろう。

なお、DBは第3章の秘密の匿名掲示板で既に触っているが、このときは sequelize という O/R マッパー経由でのアクセスだったのに対し、今回はコンソールからフロントエンドを起動して、生の SQL 文でDBにアクセスする。
本番の Web アプリ開発で SQL 文を書くことはそうないだろうが、知っておいて損はないと思う。

基本

まずは PostgreSQL のフロントエンドの起動/終了やデータベースへの接続、そして SQL の基本的なところとして CREATE・DROP・INSERT・SELECT・DELETE・UPDATE の動詞、及び PRIMARY KEY や WHERE 句の使い方を学習。
この辺は1回やれば思い出すが、しばらくするとまた忘れてしまう。
いい加減、身につけたいところ。

データモデリング

次にデータモデリングの学習。
実運用上はいろいろありそうだが、まずはテーブルを正規化できるように設計していくのが基本。
一度運用が始まってしまうと、あとでテーブル再設計なんていう手段は取りづらいので、ここをしっかりやっておかないと痛い目を見る。

結合、並び替え

続いて JOIN(結合)・ORDER BY(並び替え)の学習。
結合は内部結合と外部結合があるが、考え方自体は一度理解してしまえばそれほど難しい話ではない。

インデックス

データベース高速化のためにインデックスについて学習。
これも考え方自体はそれほど難しい話ではない。

また、インデックスに用いられるデータ構造としてよく使われているらしいB木(B-Tree)のアルゴリズムについての解説もあった。
自分くらいの世代のプログラマだと、ソートプログラムを自作した人も多いだろうし、その中で木構造のアルゴリズムを嫌でも学ぶだろうが、今の若いプログラマはどうなんだろうか。

インデックスで思い出したが、以前いたPJで「遅かったらとりあえずインデックス張ればいい」みたいな感じで運用して、あっという間に SQLite のファイルが膨れ上がる、という経験をしたことがある。
DBを動かすターゲット次第だが、インデックス張る場合には注意が必要になこともある。

集計

最後に数学における集合の概念、及び SUM(合計)・AVG(平均)・COUNT(個数)・MAX(最大)・MIN(最小) といった集計関数、GROUP BY 句、HAVING 句について学習。

これも考え方については特に難しい話ではない。
ただ、この辺にくると、ソラでSQL文を書ける気がしない。
Web系のエンジニアさんなら、苦もなく書けるのだろうか。



これでDBについて、一通りの学習を終えた。
ここでは PostgreSQL を使ったが、フロントエンドの使い方以外の知識については、MariaDB だろうが SQLite だろうが活かせるだろう。(微妙な型の違いはあるだろうが)
次はいよいよこれまでの集大成としての Web サービスの開発である。

ここのところ、リハビリに力を入れていることもあり、N予備校の方がおろそかになっている。
退院が延び延びになっているとはいえ、それほどの余裕はない(はず)。
できることなら入院中にプログラミング入門は終わらせてしまいたいところだ。

この記事へのコメント