CHAPTER 03読む目安 15分クライアント/サーバー、DB・スキーマ・テーブルの階層

全体像:サーバーからテーブルまで

この章のゴール:「サーバー → データベース → スキーマ → テーブル → 行と列」という入れ子の構造と、そこへ「つなぐ」という考え方を図で描ける。

この章がいちばん大事です

この章では、PostgreSQLの登場人物をすべて紹介し、一枚の地図にまとめます。以降の章は、すべてこの地図のどこかを詳しく見ていくだけです。細かな用語を暗記する必要はありません。「何が、何の中に入っているか」の形だけ、頭に残してください。

登場人物1:サーバーとクライアント

第1章で「データベースは表を預かる専門の係」と説明しました。この係にあたるのが、PostgreSQLサーバーです。サーバーは1台のコンピューターの中で動き続けているプログラムで、お願い(問い合わせ)が来るのを待ち、受け取ると処理して結果を返します。

サーバーにお願いをする側をクライアントと呼びます。クライアントは人間ではなく、人間が使う道具(ソフトウェア)のことです。たとえば次のようなものがクライアントになります。

  • psql(ピーエスキューエル):PostgreSQLに付属する、文字だけの画面で命令を打ち込む道具。もっとも基本的なクライアントです。
  • pgAdmin や DBeaver:マウスで操作できる画面つきの道具。表の中身を一覧で眺めたり、クリックで操作したりできます。
  • 業務システムそのもの:販売管理システムや会計システムは、裏側で自動的にサーバーにつないでデータを読み書きしています。利用者は意識しませんが、これも立派なクライアントです。
クライアント(お願いする側) psql文字で命令を打ち込む pgAdmin / DBeaver画面で操作する道具 業務システム裏側で自動的につなぐ PostgreSQL サーバー 動き続けて、問い合わせを待っている つなぐときに必要な5つの情報 host サーバーの住所(例:db.example.jp) port 窓口の番号(PostgreSQLは 5432) dbname どのデータベースか(例:minato) user / password 誰が、合言葉 接続(コネクション) クライアントは「つないで、お願いして、結果を受け取る」。この繰り返しだけ
図3-1 クライアントとサーバー。どんな道具を使っても、サーバーにつなぐときは「住所・窓口番号・データベース名・ユーザー名・パスワード」の5つを伝えます。この5つの情報を「接続情報」と呼びます。
「サーバー」という言葉の2つの意味

現場では「サーバー」が、①PostgreSQLというプログラムそのもの、②それが動いているコンピューター本体、の両方の意味で使われます。文脈で判断しますが、この教材では断りがない限り①の意味です。

登場人物2:サーバーの中の入れ子構造

サーバーの中は、ロシアのマトリョーシカ人形のような入れ子になっています。外側から順に見ていきましょう。

データベース(Database)

サーバーの中の、いちばん大きな区画です。1つのサーバーに複数のデータベースを作ることができ、たとえば「本番用」「テスト用」、あるいは「みなと文具用」「関連会社用」のように、互いに混ざってほしくない単位で分けます。クライアントがつなぐときに「どのデータベースか」を指定したのは、この区画を選ぶためです。

スキーマ(Schema)

データベースの中をさらに整理するための「引き出し」です。何も指定しなければ public という名前の引き出しが使われます。初心者のうちは「publicという引き出しが1つあって、そこに全部入っている」と思っていて差し支えありません。会社によっては「経理用」「人事用」のように引き出しを分けて使います。

テーブル(Table)

第1章で見た「行と列の表」です。得意先テーブル、請求書テーブルのように、1種類の情報につき1つのテーブルを作ります。データベースを学ぶとは、ほとんど「テーブルをどう作り、どう問い合わせるか」を学ぶことです。

行(Row)と列(Column)

テーブルの横一列が「行」で、1件のデータ(1社の得意先、1枚の請求書)を表します。縦一列が「列」で、項目(会社名、金額)を表します。英語でそれぞれ「レコード」「カラム」とも呼ばれ、現場ではこちらの呼び方も多く使われます。

SERVERPostgreSQLサーバー(1つのコンピューターで動くプログラム) DATABASEminato(みなと文具用) SCHEMApublic(既定の引き出し) TABLEcustomers(得意先) code name pref C001 あおば商事 東京都 C002 ひばり印刷 神奈川県 C003 みどり設計 千葉県 横1列 = 行(1社分) 縦1列 = 列(項目) TABLEinvoices(請求書) id cust amount 1 C001 120000 2 C002 45000 3 C001 98000 cust列で得意先と関係づけている(第4章) DATABASEminato_test(テスト用。本番と混ざらない) DATABASEkanren(関連会社用) 1つのサーバーに 複数のデータベースを 置ける
図3-2 サーバーの中の入れ子構造。「サーバー → データベース → スキーマ → テーブル → 行と列」。この図がこの教材の「地図」です。以降の章では、この図のどこを歩いているかを常に示します。

地図を言葉で言い直す

ここまでを、現場でよく聞く言い回しに置き換えてみます。

  • 「DBにつなぐ」= クライアントが接続情報を使ってサーバーのあるデータベースを開くこと。
  • 「テーブルを見る」= あるデータベースのあるスキーマにあるテーブルの中身(行と列)を取り出すこと。
  • 「本番と検証を分ける」= 同じサーバー、または別のサーバーに、別のデータベースを用意すること。
  • 「5432番が開いていない」= サーバーの窓口番号(ポート)に通信が届かず、つなげない状態。

ここまで分かれば、PostgreSQLの全体像の半分は見えています。次の章からは、地図の中心にある「テーブル」をもう少し近くで見ていきます。

この章のまとめ

  1. PostgreSQLサーバーは動き続けて問い合わせを待つプログラム。お願いする側の道具がクライアント(psql、画面つきの道具、業務システム)。
  2. つなぐには「住所・窓口番号(5432)・データベース名・ユーザー名・パスワード」の5つの接続情報を使う。
  3. サーバーの中は「データベース → スキーマ → テーブル → 行と列」の入れ子。1つのサーバーに複数のデータベースを置ける。

確認クイズ

Q1次のうち「クライアント」にあたるものはどれですか。

Q2入れ子構造を外側から順に並べたものはどれですか。

Q3「本番用のデータとテスト用のデータを絶対に混ぜたくない」とき、どの単位で分けるのが基本ですか。