1. 関係モデル
  2.  データ構造を二次元的な階層構造で表現するモデルであり、現在もっとも普及しているデータモデル。

    1. 関係モデルの目標
      1. データ独立の目標
      2.  アプリケーションが次の4つのものから独立していること。

        • 物理的データ独立性
        • ハードウェアやデータの格納方法など物理的表現方法・アクセス方法の変更の影響を受けない。

        • 論理的データ独立性
        • ビュー機能などをもつことで論理的なデータ構造の変化の影響を受けない。

        • インテグリティのデータ独立性
        • データベースのインテグリティ(整合性)を守る制約条件の設定の影響を受けない。

        • 分散からのデータ独立性
        • 分散データの位置、移動、重複など集中から分散、再配置といったデータの動きの影響を受けない。

      3. 相互理解の目標
      4.  データモデルを構造的に単純にすることで利用者やプログラマがデータの共通の理解を持ち、
        プログラマ相互のコミュニケーションが図れるようにすること。

      5. 集合演算の目標
      6.  1つの文で複数のレコードを同時に処理できる機能。

      7. 論理的基盤の目標
      8.  データベースの編成と管理に健全な論理的基盤を与える。

    2. 関係モデルの構成要素
      • 属性
      •  実体が持つ特性・性質を表現するものを属性という。属性は値を持ち、それを属性値と呼ぶ。
        属性はリレーショナルデータベースにおいて列(カラム)またはフィールドと呼ばれる。

      • 定義域
      •  属性値の集合(属性値集合)に共通の定義を定義域と呼ぶ。日付や数字などの限定的なデータの定義(データ型)も定義域に含まれる。識別コードのように桁が決まっているものも定義域として扱われる。

      •  n個の属性により構成される、データ構造。組を構成する属性の数を次数と呼ぶ。組はリレーショナルデータベースにおいて行(タプル)またはレコードと呼ばれる。

      • 関係
      •  任意の属性とその属性値を持つデータの集合を関係と呼ぶ。この関係において個々の値となるものを関係値とよび、これを持つものを関係変数と呼ぶ。関係はリレーショナルデータベースにおいて表(テーブル)と呼ばれる。

      • 候補キー
      •  関係の中で組を一意に識別するための一つまたは複数の属性を候補キーと呼ぶ。

      • 主キー
      •  候補キーのうち、どれか一つの主たるものを主キーと呼ぶ。
        主キーは行の一意性を担保するため、null値*を持つことは認められない。

      • 外部キー
      •  二つの関係の行の同士の間に1対1あるいは1対多の結びつきがある場合、参照整合性制約が生じる。これは、関係間で結びつく双方の行の属性値に一致するものがなければならないというもので、相手側の属性と一致させる属性を外部キーと呼ぶ。なお、通常、相手側の属性は候補キーになる。

    3. 関係スキーマ
    4.  関係をテキストで表現したもの。以下のように表記される。
      R(X1,X2,X3,X4,…,Xn)

      • R…関係(テーブル)
      • Xn…属性(カラム)
      • 下実線…主キー
      • 下点線…外部キー

      ※例
      従業員(社員番号,名前,生年月日,性別,住所,部門ID
      部門(部門ID,名称)

    5. 正規化
    6.  関係に存在する関数従属性に基づいて関係を分解し 一事実一箇所および単純定義域の状態にすること。 これにより一事実複数個所非単純定義域の問題を解決する。

      ※関係従属性
       関係Rで一つの属性Xが決まると、属性Yの値が決まることを属性Yが属性Xに関数従属するという。 その中で関係Rにおいて重複のない属性値集合(候補キー)をもつすべての属性と関数従属するものを完全関数従属と呼ぶ。 それに対し、関係Rにおいて候補キーの一部と関数従属する属性がある関係Rは部分関数従属性があるという。 また、関係Rで候補キー以外の属性に関数従属においてする場合、関係Rには推移関数従属性があるという。 部分関数従属性あるいは推移関数従属性がある属性は関係Rにおいて一事実複数箇所の問題が生じる。

      ※※関数従属の表記法
      • 属性Xに対し属性Yが関数従属
      • X→Y
      • 属性X、属性Yに対し属性Zが関数従属
      • {X,Y}→Z
      • 属性Xに対し属性Y、属性Zが関数従属
      • X→{Y,Z} または X→Y X→Z

      ※一事実複数個所
       異なる候補キーに対し、重複した値が登録されること。 事前登録、複数更新・登録ができなくなり、削除した際に関係の喪失が発生することとなる。

      1. 非正規形
      2.  関係Rの中に別の関係が存在している状態のこと。 集合の集合(べき集合)が生じることによる非単純定義域と部分関数従属性、推移関数従属性が存在することにより、 このような状態が発生する。

      3. 第1正規形
      4.  関係Rにある非単純定義域を単純定義域とするため、新たに候補キーとなる属性を与えて同一の組を別々にすること。

        ※例
        売上(伝票番号,日付,顧客名,住所,商品名1,単価1,数量1,商品名2,単価2,数量2)

        000001,2014/04/01,鈴木一郎,愛知県,バット,10000,1,グローブ,5000,1
        000002,2014/04/01,佐藤次郎,栃木県,バット,10000,1,ボール,500,2
        000003,2014/04/01,吉田三郎,群馬県,バット,10000,1,グローブ,5000,1
        000004,2014/04/02,鈴木一郎,愛知県,スパイク,15000,1,null,null,null

        非単純定義域(関係Rにあるべき集合)⇒商品コード,商品名,単価,数量

        売上(伝票番号,日付,顧客名,住所,商品コード,商品名,単価,数量)

        000001,2014/04/01,鈴木一郎,愛知県,001,バット,10000,1
        000001,2014/04/01,鈴木一郎,愛知県,002,グローブ,5000,1
        000002,2014/04/01,佐藤次郎,栃木県,001,バット,10000,1
        000002,2014/04/01,佐藤次郎,栃木県,003,ボール,500,2
        000003,2014/04/01,吉田三郎,群馬県,001,バット,10000,1
        000003,2014/04/01,吉田三郎,群馬県,002,グローブ,5000,1
        000004,2014/04/02,鈴木一郎,愛知県,004,スパイク,15000,1

      5. 第2正規形
      6. 関係Rから完全関数従属の属性と部分関数従属の属性を分離し、新たに関係を作り出すこと

        ※例
        売上(伝票番号,日付,顧客名,住所,商品コード,商品名,単価,数量)

        000001,2014/04/01,鈴木一郎,愛知県,001,バット,10000,1
        000001,2014/04/01,鈴木一郎,愛知県,002,グローブ,5000,1
        000002,2014/04/01,佐藤次郎,栃木県,001,バット,10000,1
        000002,2014/04/01,佐藤次郎,栃木県,003,ボール,500,2
        000003,2014/04/01,吉田三郎,群馬県,001,バット,10000,1
        000003,2014/04/01,吉田三郎,群馬県,002,グローブ,5000,1
        000004,2014/04/02,鈴木一郎,愛知県,004,スパイク,15000,1

        部分関係従属…伝票番号→{日付,顧客名,住所}/商品コード→{商品名,単価}
        完全関係従属…{伝票番号,商品コード}→数量

        売上明細(伝票番号,商品コード,数量)

        000001,001,1
        000001,002,1
        000002,001,1
        000002,003,2
        000003,001,1
        000003,002,1
        000004,004,1

        売上(伝票番号,日付,顧客名,住所)

        000001,2014/04/01,鈴木一郎,愛知県
        000002,2014/04/01,佐藤次郎,栃木県
        000003,2014/04/01,吉田三郎,群馬県
        000004,2014/04/02,鈴木一郎,愛知県

        商品(商品コード,商品名,単価)

        001,バット,10000
        002,グローブ,5000
        003,ボール,500
        004,スパイク,15000

      7. 第3正規形
      8. 関係Rから推移関数従属の属性を分離し、外部キーとなる属性を与えて新たに関係を作り出すこと

        ※例
        売上(伝票番号,日付,顧客名,住所)

        000001,2014/04/01,鈴木一郎,愛知県
        000002,2014/04/01,佐藤次郎,栃木県
        000003,2014/04/01,吉田三郎,群馬県
        000004,2014/04/02,鈴木一郎,愛知県

        推移関係従属…顧客番号→{顧客名,住所}
        関係従属なし…{伝票番号}→日付

        売上(伝票番号,日付,顧客番号)

        000001,2014/04/01,0001
        000002,2014/04/01,0002
        000003,2014/04/01,0003
        000004,2014/04/02,0001

        顧客(顧客番号,顧客名,住所)

        0001,鈴木一郎,愛知県
        0002,佐藤次郎,栃木県
        0003,吉田三郎,群馬県

      9. 第4正規形,第5正規形
      10. 上記のほか、正規形には第4正規形、第5正規形があるが通常使われることはあまりないため割愛する。