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 の句として、最も適切なものはどれか。
- WHERE 句
- SELECT 句 (列リスト指定)
- JOIN 句
- GROUP BY 句
こたえを見る
正解: 2. SELECT 句 (列リスト指定)
射影は『指定した列だけを取り出す』演算で、SQL では SELECT 句の列リスト (例: SELECT name, age FROM users) で実現します。WHERE 句は選択 (Selection)、JOIN 句は結合 (Join) に対応します。