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

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

顧客表を顧客ID・氏名、注文表を注文ID・顧客ID・金額とすれば、同じ顧客の複数注文をIDで結べます。顧客と注文の関係は一対多です。氏名は同姓同名があり、識別子としては不十分な場合があります。
主キーは各行を識別し、外部キーは別表の対応行を参照します。正規化では属性間の依存関係を整理し、部分関数従属や推移的関数従属を別の表へ分離します。
SQLのIN述語は候補集合への所属を判定します。顧客ID IN (1,3)ならIDが1または3の行が対象です。内部結合は結合条件が一致する行を組み合わせます。GROUP BYでまとめた集計結果をHAVINGで絞る場合は、集計前に行を絞るWHEREと適用段階を分けます。
E-Rモデルは顧客・注文などの実体と、それらの関連を表します。顧客一人が複数の注文を持ち、一つの注文の顧客は一人なら、一対多の関連です。E-R図はそのモデルを図で表したもので、処理の順番を示すフローチャートとは異なります。図形や線の表記規則に従って多重度を読みます。
SQLと正規形

SELECTで列、WHEREで行を絞り、JOINでキーに基づき表を結びます。GROUP BYは集約単位、HAVINGは集約結果の条件です。外部結合(LEFT OUTER JOIN)は、左側の表の行を全て残し、対応する行がない列はNULLにします。
正規化では一つの事実を重複して持たせないよう関数従属を調べ、分割後は外部キーで関係を保ちます。第1正規形から第3正規形まで、次の表の順に従属を取り除きます。
| 句 | 役割 |
|---|---|
| WHERE | 集約前の行条件 |
| GROUP BY | 集約単位 |
| HAVING | 集約結果の条件 |
| JOIN | 表の結合(内部結合・外部結合) |
| 正規形 | 取り除くもの |
|---|---|
| 第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 · 更新日:
教材の編集方針・訂正について
