本文へ移動

基本情報技術者試験 · 学習ガイド

関係データベースの設計とSQL

関係データベースとは

関係データベースとは、表の形でデータを管理し、主キーや外部キーで表同士を関連付ける仕組みです。

エルくんが顧客ID1の名札と注文A・Bの顧客ID1欄を同じ色のひもで結ぶ図。
顧客表の主キーを注文表の外部キーから参照します。同じ顧客の注文が複数あることと、顧客表のIDが一意であることは両立します。

注文のたびに顧客の住所をコピーすると、変更時に直す場所が増えます。重複と更新の不整合を防ぐため、何を別の表にするか考えます。

基本の仕組み

基本の仕組みの図解。左に顧客表の1行、右に注文表の複数行を置く。顧客表の主キー「顧客ID」から、同じ値を持つ各注文行の外部キー「顧客ID」へ矢印を分岐させ、一対多を示す。
覚えること:同じ顧客IDで1人と複数注文を結ぶ

顧客表を顧客ID・氏名、注文表を注文ID・顧客ID・金額とすれば、同じ顧客の複数注文をIDで結べます。顧客と注文の関係は一対多です。氏名は同姓同名があり、識別子としては不十分な場合があります。

主キーは各行を識別し、外部キーは別表の対応行を参照します。正規化では属性間の依存関係を整理し、部分関数従属や推移的関数従属を別の表へ分離します。

SQLのIN述語は候補集合への所属を判定します。顧客ID IN (1,3)ならIDが1または3の行が対象です。内部結合は結合条件が一致する行を組み合わせます。GROUP BYでまとめた集計結果をHAVINGで絞る場合は、集計前に行を絞るWHEREと適用段階を分けます。

E-Rモデルは顧客・注文などの実体と、それらの関連を表します。顧客一人が複数の注文を持ち、一つの注文の顧客は一人なら、一対多の関連です。E-R図はそのモデルを図で表したもので、処理の順番を示すフローチャートとは異なります。図形や線の表記規則に従って多重度を読みます。

SQLと正規形

SQLと正規形の図解。左から右へ、表の行→WHERE→GROUP BY→HAVINGの順に矢印でつなぐ。WHEREの後に仕切りを置き、左は集約前の行、右はまとめられた集約結果として、条件をかける対象の違いを示す。
覚えること:WHEREは集約前、HAVINGは集約後

SELECTで列、WHEREで行を絞り、JOINでキーに基づき表を結びます。GROUP BYは集約単位、HAVINGは集約結果の条件です。外部結合(LEFT OUTER JOIN)は、左側の表の行を全て残し、対応する行がない列はNULLにします。

正規化では一つの事実を重複して持たせないよう関数従属を調べ、分割後は外部キーで関係を保ちます。第1正規形から第3正規形まで、次の表の順に従属を取り除きます。

SQLと正規形
句役割
WHERE集約前の行条件
GROUP BY集約単位
HAVING集約結果の条件
JOIN表の結合(内部結合・外部結合)
SQLと正規形
正規形取り除くもの
第1正規形繰返し項目(1つの欄に複数の値)
第2正規形主キーの一部だけで決まる項目(部分関数従属)
第3正規形主キー以外の項目で決まる項目(推移的関数従属)

試験に出る

  • 主キー(行の識別)と外部キー(別表の参照)の違い。
  • 顧客と注文が一対多になる関係の読み方。
  • IN述語は候補集合への所属を判定すること。
  • 内部結合は条件が一致する行を組み合わせること。
  • GROUP BYでまとめた結果をHAVINGで絞り、WHEREとは適用段階が違うこと。
  • 第1〜第3正規形で取り除く従属の違いと、外部結合で対応のない行がNULLで残ること。

重要な言葉

主キー
表の行を一意に識別する項目。
外部キー
別の表の対応する行を参照する項目。
E-R図
実体とその関係を図で表したもの。
内部結合
結合条件が一致する行を組み合わせる操作。

確認問題

確かめよう一対多の顧客・注文表を結合した結果は必ず顧客数と同じ行数?

いいえ。複数注文のある顧客は対応する注文ごとに現れます。

外部キーは、表の行を一意に識別するために使う。

GROUP BYでまとめた結果を絞るにはHAVINGを使う。

表の行を一意に識別するキーは?

集計した結果を条件で絞るのに使うのは?

注文のたびに顧客の住所をコピーすると、変更時に直す場所が増えます。とを防ぐため、何を別の表にするか考えます。

顧客表を顧客ID・氏名、注文表を注文ID・顧客ID・金額とすれば、同じ顧客の複数注文をIDで結べます。顧客と注文の関係はです。氏名は同姓同名があり、としては不十分な場合があります。

は各行を識別し、は別表の対応行を参照します。正規化では属性間の依存関係を整理し、部分関数従属や推移的関数従属を別の表へ分離します。

SQLのは候補集合への所属を判定します。顧客ID IN (1,3)ならIDが1または3の行が対象です。は結合条件が一致する行を組み合わせます。GROUP BYでまとめた集計結果をHAVINGで絞る場合は、集計前に行を絞るWHEREと適用段階を分けます。

は顧客・注文などの実体と、それらの関連を表します。顧客一人が複数の注文を持ち、一つの注文の顧客は一人なら、一対多の関連です。E-R図はそのモデルを図で表したもので、処理の順番を示すフローチャートとは異なります。図形や線の表記規則に従ってを読みます。

出典・参考資料

試験の公式案内と、この記事の参考にした学習資料です。

編集:Pinternet Works · 更新日:

教材の編集方針・訂正について