データベース

第3章 関係データベースの基礎
3.1 関係とは
3.2 関係代数
3.1 関係とは
直積とは
C : サークル名の集合
N : 取りうるすべての部員数の集合
集合:
S  {(c, n) | c  C, n  N}
を C と N の直積といい、以下のように書く。
S CN
n項関係とは
集合G1, G2, ・・・, Gn が与えられたとき、
その直積集合
S  G1  G2  Gn
の部分集合を、 G1, G2, ・・・, Gn の n項関係また
は単に関係もしくはリレーションという。
もっと直感的には・・・
スキーマの形式
サークル表
サークル(サークル名,部員数)
一般に、 R( A1 , A2 ,, An )
と書く。
R : 関係名,Ai : 属性( i = 1 ~ n), n: 次数
サークル表は属性が2つあるので2項関係という。
(1つの場合、単項関係)
属性のドメイン
その属性が取りうるあらゆる値の集合を、
その属性のドメインという
【例】
サークル名 : 文字列として表現可能なあらゆる名称
部員数
: 数値として表記されるすべての数字
【注】
部員数と活動年数は共にドメインは数値である。
一方、電話番号のドメインは数字の並びではあるが、
数値とはみなさない。
タプル
関係の各要素 (v1, v2, ・・・, vn)を n 組、または
単にタプルという。
関係は単なる集合であり、
その要素同士に順序関係を持たない。
【例】
サークルにおけるサークル名と部員数の間には
順序関係はない。
どちらが先にきても構わない。
リレーションではない表の例
以下は、一般的な表ではあるが、
属性値に複数の値を持つような表は
リレーションではない。
学生ID
サークル名
活動年数
1122232 卓球部
1
1123321 サッカー部
1
1023442 美術部, 卓球部
1024551 剣道部
1025120 音楽部, 空手部
・
・
1, 2
2
2, 1
・
・
「第1正規形(後述)の制約を満たしていない」という言い方をする。
ナル値(空値:NULL)
属性のうち値が未知のものを
ナル値(NULL)という。
【例】NULLを指定したタプル
1023126 サッカー部
NULL
キー属性
そのリレーション内で
NULL値以外の属性値が
2つ以上一致することがないような属性値
(キー属性、候補キーという)
【例】
学生ID
学科ID
主キー
候補キーのうち
属性値としてNULLをとりえないものをひとつ選び、
検索するためのキーとするものを
主キーという。
【例】
学生ID
学科ID
外部キー
NULLでないかぎり、
必ず関係における属性の値として
登録されているもの
【例】
「サークル活動」における「サークル名」属性の値として
登録されている値を用いる。
この場合、「サークル名」を外部キー(foreign key)と呼ぶ
関数従属性
ある属性が決まれば、
他の属性値も決まってしまうような関係
Rの属性Xに対してただ一つのYの値が
対応する場合(XはYを決定する)、次のように書く。
R. X  R.Y
【例】
「学科ID」が決まれば、「学科名」は一意に決まる。
「学生番号」が決まれば「氏名」は一意にきまる。
第3章 関係データベースの基礎
3.1 関係とは
3.2 関係代数
3.2 関係代数
(1) 操作 A. 基本操作 (a) 制限(選択)
関係から条件を満たすタプルを抜き出す
(restriction, selection)
(b) 射影
関係から指定属性のみを取り出す
(projection)
(c) 直積
2つの関係からタプルを取り出し、
そのすべての組み合わせを求める。
(Cartesian product : Cは大文字で書くこと)
・
・
・
・
・
・
・
・
・
(d) 和
2つの関係の和集合をとる。
(union)
属性およびそのドメインが同じでなければならない(union
compatible条件)
(e) 差
2つの関係の差集合をとる。
(difference)
(f) 積
2つの関係の共通部分をとる。
(intersection)
B. 基本操作の組み合わせ (g) 結合
2つの関係の直積をとり、条件を満たすタプルの
みを抜き出す(join)
直積
条件
(h) 商,除算(division)
【条件】 以下のとき除算できる。
① 2つの関係R1, R2が与えられている。
② R1には、R2が持つすべての属性(R2との共通
属性)が定義されている。
除算の方法(1)
① R1のタプルであって、その共通属性値がR2のタ
プルであるようなものを選ぶ。
② 集められたタプルを固有属性値が同じものごと
にグループ化する。
③ 各グループにおける共通属性値の集合がR2を
含んでいる場合、その固有属性値を取り出す。
除算の方法
除算の方法(2)
R1
同じ値A
R2
R2
A
B
同じ値B
R2
(2) 関係代数操作の記法と操作例
(a) 制限(選択)
【書式】
Rest [op1 comp op2] (R)
R : 捜査対象となる関係、 op1, op2:属性または定数
Comp : 比較演算子(=, ≦, ≠, <・・・)
【例】部員数21名以上の大規模サークル
Rest [部員数 > 20] (サークル)
(b) 射影
【書式】
Proj [A1, A2, ・・・, An] (R)
R : 捜査対象となる関係、 A1, A2,・・・An:属性
【例】関係「学生」から学生IDと氏名の対応表を作成
Proj [学生ID, 氏名] (学生)
本来は記号
で表すが
ここではJoinで表記
【書式】
R1 Join [条件] R2
【例】関係「学生」と「学科」から所属学科一覧を作成
学科
Join [学科ID=所属学科ID] 学生
(c) 結合
【例】関係「学生」と「学科」から所属学科一覧を作成
学科
結合の例
Join [学科ID=所属学科ID] 学生
学科ID
学科名
所属学部
学生ID
氏名
所属学科ID
E01
機械
工学部
1110123
山田隆夫
E01
E02
電気電子
工学部
1121245
岸田光一
E02
E03
情報
工学部
1132225
山崎誠司
S01
S01
物理
理学部
1121245
宮崎洋一
E02
学科ID
学科名
所属学部
学生ID
氏名
所属学科ID
E01
機械
工学部
1110123
山田隆夫
E01
E02
電気電子
工学部
1121245
岸田光一
E02
S01
物理
理学部
1132225
山崎誠司
S01
E02
電気電子
工学部
1121245
宮崎洋一
E02
【書式】
R1 ÷ R2
【例】
サークル活動 ÷ 学科
(d) 除算
以下サークル名には卓球部、サッカー
部、野球部しかないことを前提とする 除算の例
学生ID
サークル名
サークル名
1001516
野球部
卓球部
1101001
卓球部
1101001
サッカー部
1101001
野球部
1102123
卓球部
1103003
サッカー部
1102256
卓球部
1102256
サッカー部
学生ID
1102256
野球部
1101001
1103021
野球部
1102256
1104146
卓球部
1202318
サッカー部
÷
サッカー部
野球部
万能学生