ITパスポート対策
関係データベース
関係データベースはデータを表の形で持ちます。この章でいちばん出題数が多いところなので、用語を正確に対応づけていきます。
表・行・列の呼び名
次の社員表を例にします。
| 社員ID | 氏名 | 部署コード |
|---|---|---|
| 1001 | 佐藤 | D01 |
| 1002 | 鈴木 | D02 |
| 1003 | 高橋 | D01 |
横方向の1件分のデータが行で、レコードともいいます。縦方向の項目が列で、フィールドや属性ともいいます。試験では同じものを別の言葉で書いてくるので、行イコールレコード、列イコールフィールドという対応を先に頭に入れておくと読み違えません。
主キーと外部キー
主キーは、その表の中で行を1件に特定できる列です。上の表なら社員IDが主キーです。氏名は同姓同名がありえるので主キーにできません。主キーには2つの決まりがあり、重複した値を入れられないことと、空(NULL)にできないことです。この2つはそのまま正誤問題になります。
1つの列では特定できないときは、複数の列を組み合わせて主キーにすることもできます。たとえば受講記録表なら、社員IDと講座IDの2列そろえて1件が決まります。これを複合キーといいます。
外部キーは、別の表の主キーを指し示すための列です。社員表の部署コードは、次の部署表の主キーを指しています。
| 部署コード | 部署名 |
|---|---|
| D01 | 営業部 |
| D02 | 開発部 |
外部キーを設定しておくと、部署表にないコード、たとえばD09を社員表に入れようとしたときにDBMSが受け付けません。これを参照整合性といいます。逆に、まだ社員がぶら下がっている部署D01を部署表から削除しようとしても止められます。「外部キーは何を防ぐのか」と問われたら、存在しない相手を指してしまう状態を防ぐ、と答えます。
正規化は重複をなくすため
もし社員表に部署名まで書いていたら、営業部という文字列が社員の数だけ並びます。営業部が第一営業部に改称したとき、全部の行を直さなければならず、直し漏れた行が出れば同じ部署なのに名前が2種類ある状態になります。
そこで部署の情報を別の表に切り出し、社員表からは部署コードで参照します。この作業が正規化です。目的は重複をなくして、更新時の不整合を防ぐことです。ここが試験の狙い目で、正規化の目的として「検索速度を上げるため」「データ量を圧縮するため」という選択肢が誤りとして並びます。正規化すると表が分かれるぶん結合が増え、検索はむしろ遅くなることもあります。速度の話ではない、と覚えてください。
関係演算は3つ
表から必要なデータを取り出す操作を関係演算といい、次の3つが出ます。
| 演算 | 何をするか | 覚え方 |
|---|---|---|
| 選択 | 条件に合う行を取り出す | 横に切る |
| 射影 | 指定した列を取り出す | 縦に切る |
| 結合 | 2つの表を共通の列でつなぐ | 横につなげる |
社員表に対して部署コードがD01という選択をすると、佐藤と高橋の2行が残ります。氏名だけの射影をすると、佐藤・鈴木・高橋の1列だけが残ります。社員表と部署表を部署コードで結合すると、次のようになります。
| 社員ID | 氏名 | 部署コード | 部署名 |
|---|---|---|---|
| 1001 | 佐藤 | D01 | 営業部 |
| 1002 | 鈴木 | D02 | 開発部 |
| 1003 | 高橋 | D01 | 営業部 |
選択と射影は名前と向きが入れ替えて出題されるのが定番です。選択が行、射影が列。ここだけは丸暗記でかまいません。