ER図と関係代数

ER 図でのカーディナリティと多対多分解、関係代数の主要演算 (射影・選択・結合) と SQL 対応を整理。

ER 図は DB 論理設計の基本ツール。関係代数は SQL の理論的基礎で、科目A・科目Bで問われます。

鳴海 理央(普段) 鳴海 理央

ER図 は Entity (実体) と Relationship (関連) でデータ構造を表す図ですね。
まずは 1対1・1対多・多対多の3パターンを押さえます。

砂原 ニコ(普段) 砂原 ニコ

多対多って実装どうするの?

緒方 ナオミ 先生(笑顔) 緒方 ナオミ 先生

多対多は『中間テーブル』で1対多 ×2 に分解するの。
学生と科目が多対多なら、『学生-履修-科目』の履修テーブルを置くと自然に解けるわ。

藤咲 まりあ(普段) 藤咲 まりあ

関係代数 って何ですかぁ?

鳴海 理央(普段) 鳴海 理央

表に対する数学的な演算で、射影・選択・結合・和・差・直積などがあります。
SQL の SELECT 文は、だいたいこれらの組合せで実現されているんですよ。

緒方 ナオミ 先生(普段) 緒方 ナオミ 先生

AP では『次の関係代数式と等価な SQL はどれか』とか、『この ER 図から導かれるテーブル数は何個か』が頻出よ。

学生・科目・履修で多対多を分解する

学生は複数の科目を履修し、科目にも複数の学生が所属するため、学生と科目は多対多です。そのまま一つの列に科目一覧を詰め込まず、次の3表へ分けます。

表主キー主な列
学生学生ID氏名、学年
科目科目ID科目名、担当者
履修学生ID+科目ID履修日、成績

履修表の学生IDと科目IDは、それぞれ学生表・科目表を参照する外部キーです。中間テーブルを置くことで「学生1対多の履修」「科目1対多の履修」という二つの1対多に変換できます。

関係代数をSQLへ読み替える

関係代数意味SQLの対応
選択 σ条件に合う行を残すWHERE
射影 π必要な列を取り出すSELECTの列リスト
結合 ⋈共通属性で表を結ぶJOIN ... ON
砂原 ニコ(普段) 砂原 ニコ

関係代数の『選択』って、SQLのSELECTと同じ名前だからSELECT句だよね?

鳴海 理央(普段) 鳴海 理央

そこが最頻のひっかけです。
関係代数の選択は行を絞るのでWHERE、射影は列を選ぶのでSQLのSELECT列リストに対応します。

藤咲 まりあ(普段) 藤咲 まりあ

式に選択と射影が両方あったら、どう読めばいいですかぁ?

緒方 ナオミ 先生(笑顔) 緒方 ナオミ 先生

内側から順に、まずどの行を残し、次にどの列を出すかを書き出しましょう。
表名、結合条件、行条件、出力列の4点へ分解するとSQLへ変換しやすいわ。

確認クイズ

関係代数の『射影 (Projection)』に対応する SQL の句として、最も適切なものはどれか。

  1. WHERE 句
  2. SELECT 句 (列リスト指定)
  3. JOIN 句
  4. GROUP BY 句
こたえを見る

正解: 2. SELECT 句 (列リスト指定)

射影は『指定した列だけを取り出す』演算で、SQL では SELECT 句の列リスト (例: SELECT name, age FROM users) で実現します。WHERE 句は選択 (Selection)、JOIN 句は結合 (Join) に対応します。

🔖 この記事の関連書籍

Amazonアソシエイトリンクを含みます。他分野は おすすめ書籍ページ へ。