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営業部

選択と射影は名前と向きが入れ替えて出題されるのが定番です。選択が行、射影が列。ここだけは丸暗記でかまいません。

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部