基本情報技術者試験など情報処理技術者試験を受験する方にとっては必須の,関係モデル(リレーショナルモデル)についてシンプルにまとめています。はじめに,データベースの論理設計について説明し,次に,関係モデルについて,キー(主キー,外部キーなど),関数従属(部分関数従属,推移関数従属など),正規化(第1正規化,第2正規化,第3正規化),関係演算・集合演算(和,積,差,直積,選択,射影,結合(内部結合,外部結合),商)を説明しています。少しややこしいかもしれませんが,基本情報技術者試験や応用情報技術者試験で,実際に出題される内容ですので避けてはとおれません。根気よく読んでみましょう。
論理設計
データベースの論理設計は,システム開発の外部設計(データベース設計)で行われます。論理設計では,実際にデータベース化する部分のみを,実装するデータベース(階層型,ネットワーク型,関係)に合わせて,論理データモデルとしてモデル化します。ここでは,関係モデルについて説明します。
関係モデル(リレーショナルモデル)
関係モデルは,論理データモデルのひとつで,データを2次元の表で表します。
キー
候補キー
候補キーとは,表のひとつの行を一意に識別する属性(または属性の組)のことをいいます。
この「選手」表の場合,「選手番号」が候補キーになります。また,「背番号」,「選手名」の複合キーについても行を一意に識別することができますので候補キーになります。
主キー(primary key)
主キーは,候補キーの中から任意に選ぶことができますが,次のような制約(主キー制約)があります。
- 行を一意に識別できなければならない(一意性制約)
- 主キーを構成する属性は,値を必ず持っていなければならない(NOT NULL制約)
外部キー(foreign key)
外部キーは,関連する他の表の特定の属性(列)を参照する属性(または属性の組)のことをいい,次のような制約(参照制約)があります。
- 外部キーの値が,関連する他の表(被参照表)に存在しなければならない(参照制約)
※ 参照制約とは,データの矛盾を起こすような,行の追加・変更・削除を制約することをいいます。
正規化
正規化とは,関係データベースに実装できるように,データベースの論理的なデータ構造を設計する技法のことをいいます。また,正規化したデータ構造のことを正規形といいます。
関数従属
関数従属とは,ある属性Aの値が決まれば属性aの値が一意に決まる関係をいいます。「A→a」と表し,「aはAに関数従属する」といいます。
また,ある属性Bと属性Cの値が決まれば属性bの値が決まる場合は,「(B,C)→b」と表します。
部分関数従属
部分関数従属とは,たとえば,「(B,C)→b」という関係があった場合に,属性Bの値だけでbの値が決まるというように主キー(厳密には候補キー)の一部に関数従属している状態をいいます。一方,属性Bと属性Cの両方の値が決まらなければ,属性bの値が決まらない場合は,完全関数従属しているといいます。
推移関数従属
推移関数従属とは,非キー属性間に関数従属がある状態をいいます。
非正規形の表
正規化が行われていない,繰返し項目が存在するような表を非正規形といいます。
第1正規化
第1正規化では,繰返し項目を排除します。
第1正規化を行うと繰返し項目は排除されますが,冗長性(重複)は残ります。よって,次のような問題が発生する可能性があります。
挿入時異常
「投手」表で,選手のいないチームを登録することはできない(主キー「選手番号」に空値(NULL値)は許されないため)。
修正時異常
「投手別球種別球速」表で,「球種」を変更する場合,1行でも変更し忘れると,不整合(データの矛盾)が発生する。
削除時異常
「投手」表で,「広島」チームに選手が1人しか所属していない場合(そういうことは,ほとんどないと思いますが),その行(「選手名」が「たけだ」の行)を削除すると,チーム情報が失われる。同様に,「投手別球種別球速」表で,「球種」が「チェンジアップ」の行を削除すると,球種情報が失われる。
第2正規化
第2正規化では,第1正規形の表に対して部分関数従属を排除し,すべての非キー属性が主キーに対して完全関数従属である状態にします。
※ 部分関数従属については,上記の「部分関数従属」を参照してください。
第3正規化
第3正規化では,第2正規形の表に対して推移関数従属を排除します(非キー属性間に関数従属がない状態にします)。
※ 推移関数従属については,上記の「推移関数従属」を参照してください。
関係演算(集合演算を含む)
和(UNION),積(INTERSECT),差(EXCEPT)
和,積,差の集合演算は,同じ構造(同じ属性)を持つ表に対して行う演算です。
和 | 2つの表の,いずれかに属している行を併せて新しい表を作る |
積 | 2つの表の,両方に属している行を取り出して新しい表を作る |
差 | 2つの表A,表Bに対する差(A-B)は,表Aに属していて表Bに属していない行を取り出して新しい表を作る |
和,積,差の3つの集合演算は,同じ構造(同じ属性)を持つ表に対してのみ行うことができます。
直積
直積は,異なる構造(異なる属性)を持つ表に対して行う集合演算です。2つの表において,すべての行の組み合わせを作ります。
選択(selection),射影(projection)
選択は,表の中から条件を満たす行を取り出して新しい表を作る関係演算です。射影は,表の中から指定した列(属性)を取り出して新しい表を作る関係演算です。
結合(join)
結合は,2つの表が持つ同じ列(属性)同士で結合して新しい表を作る関係演算です。
内部結合 | 2つの表に存在するレコード同士を結合して取り出す |
外部結合 | 2つの表に存在するレコード同士は結合して取り出し,基準となる表にだけ存在するレコードについては,そのまま取り出す |
商
商は,一方の表から,もう一方の表の各レコードの属性をすべて含む行を取り出して新しい表を作る関係演算です。ただし,もう一方の表の属性は取り除かれます。
まとめ
今回は,関係モデルについて,シンプルにまとめてみました。主キーや外部キー,関数従属,正規化,関係演算については,基本情報技術者試験や応用情報技術者試験などの情報処理技術者試験で,実際に出題されます。ややこしいかもしれませんが,しっかり定着するまで,繰り返し読みましょう。