関係モデルは,基本情報技術者試験をはじめとする情報処理技術者試験で重要となる基礎的な内容です。データベース設計の論理設計では,概念設計で整理したデータを,実際にデータベースとして扱える構造に整理していきます。関係モデルの基本となる考え方を,きちんと整理できていますか?
関係モデル=論理設計で用いられるデータモデル
関係モデルは,データを2次元の表(リレーション)で表現するデータモデルです。現在の多くのデータベースは,この関係モデルを基にした関係データベースとして実装されています。
このページでは,関係モデルの基本として,キー(候補キー,主キー,外部キー),関数従属,正規化(第1〜第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つの表に対して行う関係演算です。2つの表において,すべての行の組み合わせを作ります。
選択(selection),射影(projection)とは
選択は,表の中から条件を満たす行を取り出して新しい表を作る関係演算です。射影は,表の中から指定した列(属性)を取り出して新しい表を作る関係演算です。
結合(join)とは
結合は,2つの表が持つ同じ列(属性)同士で結合して新しい表を作る関係演算です。
| 内部結合 | 2つの表の結合条件に一致するレコード同士を結合して取り出す |
| 外部結合 | 2つの表に存在するレコード同士は結合して取り出し,基準となる表にだけ存在するレコードについては,そのまま取り出す |
※ 自然結合…2つの表が持つ同じ列(属性)を基に結合する関係演算。2つの表が持つ同じ列については,1つにまとめられる
商とは
商は,一方の表から,もう一方の表の各レコードの属性をすべて含む行を取り出して新しい表を作る関係演算です。ただし,もう一方の表の属性は取り除かれます。
まとめ
今回は,関係モデルについて,論理設計における位置づけから,主キーや外部キー,関数従属,正規化(第1〜第3正規化),さらに関係演算までをシンプルにまとめてみました。関係モデルでは,データを表形式で整理し,キーや関数従属の関係を利用してデータ構造を整えていきます。これらの内容は,データベース設計を理解するうえで基礎となる重要なポイントです。
一度で理解しきれなくても問題ありませんので,全体の流れを意識しながら繰り返し確認し,少しずつ理解を深めていきましょう。
理解が進んだら,基本情報技術者試験の過去問題等にもチャレンジしてみてください。


