データ構造を二次元的な階層構造で表現するモデルであり、現在もっとも普及しているデータモデル。
アプリケーションが次の4つのものから独立していること。
ハードウェアやデータの格納方法など物理的表現方法・アクセス方法の変更の影響を受けない。
ビュー機能などをもつことで論理的なデータ構造の変化の影響を受けない。
データベースのインテグリティ(整合性)を守る制約条件の設定の影響を受けない。
分散データの位置、移動、重複など集中から分散、再配置といったデータの動きの影響を受けない。
データモデルを構造的に単純にすることで利用者やプログラマがデータの共通の理解を持ち、
プログラマ相互のコミュニケーションが図れるようにすること。
1つの文で複数のレコードを同時に処理できる機能。
データベースの編成と管理に健全な論理的基盤を与える。
実体が持つ特性・性質を表現するものを属性という。属性は値を持ち、それを属性値と呼ぶ。
属性はリレーショナルデータベースにおいて列(カラム)またはフィールドと呼ばれる。
属性値の集合(属性値集合)に共通の定義を定義域と呼ぶ。日付や数字などの限定的なデータの定義(データ型)も定義域に含まれる。識別コードのように桁が決まっているものも定義域として扱われる。
n個の属性により構成される、データ構造。組を構成する属性の数を次数と呼ぶ。組はリレーショナルデータベースにおいて行(タプル)またはレコードと呼ばれる。
任意の属性とその属性値を持つデータの集合を関係と呼ぶ。この関係において個々の値となるものを関係値とよび、これを持つものを関係変数と呼ぶ。関係はリレーショナルデータベースにおいて表(テーブル)と呼ばれる。
関係の中で組を一意に識別するための一つまたは複数の属性を候補キーと呼ぶ。
候補キーのうち、どれか一つの主たるものを主キーと呼ぶ。
主キーは行の一意性を担保するため、null値*を持つことは認められない。
二つの関係の行の同士の間に1対1あるいは1対多の結びつきがある場合、参照整合性制約が生じる。これは、関係間で結びつく双方の行の属性値に一致するものがなければならないというもので、相手側の属性と一致させる属性を外部キーと呼ぶ。なお、通常、相手側の属性は候補キーになる。
関係をテキストで表現したもの。以下のように表記される。
R(X1,X2,X3,X4,…,Xn)
関係に存在する関数従属性に基づいて関係を分解し 一事実一箇所および単純定義域の状態にすること。 これにより一事実複数個所と非単純定義域の問題を解決する。
※関係従属性
関係Rで一つの属性Xが決まると、属性Yの値が決まることを属性Yが属性Xに関数従属するという。
その中で関係Rにおいて重複のない属性値集合(候補キー)をもつすべての属性と関数従属するものを完全関数従属と呼ぶ。
それに対し、関係Rにおいて候補キーの一部と関数従属する属性がある関係Rは部分関数従属性があるという。
また、関係Rで候補キー以外の属性に関数従属においてする場合、関係Rには推移関数従属性があるという。
部分関数従属性あるいは推移関数従属性がある属性は関係Rにおいて一事実複数箇所の問題が生じる。
※一事実複数個所
異なる候補キーに対し、重複した値が登録されること。
事前登録、複数更新・登録ができなくなり、削除した際に関係の喪失が発生することとなる。
関係Rの中に別の関係が存在している状態のこと。 集合の集合(べき集合)が生じることによる非単純定義域と部分関数従属性、推移関数従属性が存在することにより、 このような状態が発生する。
関係Rにある非単純定義域を単純定義域とするため、新たに候補キーとなる属性を与えて同一の組を別々にすること。
※例
関係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
関係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,吉田三郎,群馬県
上記のほか、正規形には第4正規形、第5正規形があるが通常使われることはあまりないため割愛する。