ppt - Oshita Lab.

Download Report

Transcript ppt - Oshita Lab.

データベースS
第3回 リレーショナルデータベース
システム創成情報工学科 尾下 真樹
今回の内容
• リレーションスキーマ
– リレーションスキーマ
– リレーションの整合性制約
• リレーションの操作体系
– リレーショナル代数
– リレーショナル代数式
– リレーショナル論理式
教科書
• 「リレーショナルデータベース入門 」
増永良文 著、サイエンス社 (2,600円)
– 2章・3章
• 「データベースシステム」
北川 博之 著、昭晃堂 出版 (3,200円)
– 3章 30~54ページ
リレーションスキーマ
概要
• スキーマとインスタンス
• 表形式による表現
• リレーションスキーマの決まり
– 第1正規形
– 整合性制約
• ドメイン制約、キー制約、参照整合性制約、一貫性制
約、従属性制約
リレーショナルデータモデル(復習)
• リレーショナルデータモデル
– 1970年にCoddによって提案される
– 従来のデータモデルと比べて、単純、データ独
立性が高い
• 複数の属性の組み合わせによってそれぞれのリレー
ションを定義
• リレーション同士の演算によりさまざまな処理を実現
– 可変長のデータやデータ構造が複雑なデータに
は不向き
リレーショナルデータモデルの例(復習)
科目
科目番号
科目名
01
データベース
03
コンピュータグラフィックス
・・・
・・・
履修
学生
学籍番号
氏名
科目番号 学籍番号 成績
0123001 尾下真樹
01
0123001
60
0123002 下戸彩
03
0123002
80
0123003 本村拓哉
01
0123003
70
・・・
・・・
・・・
・・・
スキーマとインスタンス(復習)
• リレーショナルモデルのスキーマ・インスタンス
– スキーマ
• リレーション名、リレーションの各属性名、ドメイン
• キー制約、参照整合性制約、属性制約などの制約
– インスタンス
• 属性値の組によって表される各データの集合
従業員
スキーマ
従業員番号 部門番号
氏名
年齢
001
1
尾下 真樹
27
002
2
下戸 彩
17
003
3
本村 拓哉
30
※ 実際には各種制約を含む
インスタンス
スキーマとインスタンス(復習)
• スキーマ
– データベースに格納されるデータのデータ構造、
データの型、データ同士の関連、各種制約を記
述したもの
– 最初に一度定義したら基本的に変更されない
• インスタンス
– スキーマにもとづいて格納された実際のデータ
– データベースの利用に応じて追加・削除・変更さ
れる
リレーションスキーマ
• リレーションスキーマの表現
R A1,, Ai ,, An 
Ai  Di
– R リレーション名
– Ai 属性名
– Di ドメイン(属性値のとりうる範囲)
– 例: 科目(科目番号、科目名、単位数)
D1(科目番号) = {001, 002、・・・}
D2(科目名) = {データベース, グラフィックス, ・・・}
リレーション
• リレーション
– リレーションスキーマに基づいて格納される実際
のデータ(インスタンス)
• 数学的には、全てのDの組み合わせの部分集合
– 全部で D1×・・・×Dn 通りのデータがありうる
– インスタンスはその部分集合になる
– インスタンスのことをタプル(組)ともいう
– リレーションの次数
• 属性の数=リレーションの次数=リレーションの項数
– 単項リレーション、二項リレーション、n項リレーション
リレーションの表現
• リレーションは表形式で表現できる
– あくまで集合を表として表しているだけなので、
厳密には、リレーションと表は異なる
• タプルの順番は意味を持たない
• 全く同じ値を持つタプルが複数あることは許されない
• 属性の順番も本来は意味はない
従業員番号 部門番号
氏名
年齢
001
1
尾下 真樹
27
002
2
下戸 彩
17
003
3
本村 拓哉
30
004
1
宇田 ヒカル
20
第一正規形
• 第一正規形(first normal form)制約
– ドメイン(属性の取りうる値)は分解不可能な単
純な値でなければならないという制約
– 各属性は、単一の値でなければいけない
• 第二、第三正規形なども次回の講義で出てくる
第一正規形を満たさないスキーマの例 (ひとつの属性に複数の値がある)
教科書 図3.2
第一正規形(続き)
– 第一正規形を満たすように2つのリレーションス
キーマに分割するなどする必要がある
教科書 図3.3
空値
• 空値
– 属性値が存在しないことを示す特殊な属性値
– 「NULL」 と表す
• ゼロや空白と空値の区別に注意
– ゼロや空白の場合は、その
属性値がゼロあるいは空白
と分かっているもの
– NULLの場合は、値が存在
しないか、値がまだ分から
ないということ
履修
科目番号 学籍番号
成績
001
00001
90
001
00002
0
001
00003
NULL
※ NULLは、値がないことを表す
(例えば成績が未評価など)
リレーションの整合性制約
• リレーションの整合性を保つために満たされ
ていなければならない制約
–
–
–
–
–
ドメイン制約
キー制約
参照整合性制約
一貫性制約
従属性制約
• データベースを設計する時は、リレーション
スキーマに加えて、これらの制約も指定する
ドメイン制約
• 属性値はドメインの要素でなければいけない
Ai  Di
– 基本的には、整数、実数、文字列などの型によっ
て規定される
– 数値型の場合は、値の範囲も規定されることもあ
る(例えば、成績は0~100の値、など)
– 文字列型のドメインなどは、特定の値の集合に
規定されることもある(例えば、都道府県など)
キー制約
• 超キー
– 複数のタプルが同一の属性値をもつことがないような属性、
あるいは、属性の集合
– その属性(属性の集合)の値が決まれば、タプルを一意に
決定することができる
• 候補キー(単にキーと呼ぶこともある)
– 最小の超キー(候補キーの部分集合が超キーとならない)
• 主キー
– 候補キーのうち、属性値が空値にならず管理上適当なもの
超キー
– 例: 学生(学籍番号、氏名、住所、
主キー
候補キー
※ どの属性が超キーに
学科) なるかはデータに依存
※ 超キーは他にも存在
キー制約(続き)
• キー制約は、スキーマの正規化(次回の講
義で説明)を行なう上で、重要になる
• 候補キーは、リレーションにどのようなデータ
を格納するかによって決まる
– 超キーは、候補キーに任意の属性を加えたもの
• 超キーは、候補キーを定義する上で重要な概念
• 通常は、超キーを直接意識する必要はない
– 主キーは、複数の候補キーのうち、任意のもの
• 通常は、ひとつの整数値の属性からなる候補キーを
主キーとする
キー制約の例
従業員(従業員番号, 氏名, 部門番号)
– 従業員番号は、全ての従業員に異なる番号が
振られているとする
– 同じ部門には、同じ氏名の従業員は存在しない
ものとする
(主キー)
候補キー {従業員番号}, {氏名, 部門番号}
超キー {従業員番号}, {氏名, 部門番号},
{従業員番号, 氏名},
{従業員番号, 部門番号},
{従業員番号, 氏名, 部門番号}
参照整合性制約
• 参照整合性制約
– 複数のリレーションの間の制約
• リレーションのある属性値が、他のリレーションのある
タプルの主キーの値でなければならない
• 例: 科目(科目番号, …)、 履修(…, 科目番号, …)
• ふたつのリレーションが同一のこともある
• 外部キー
– 参照整合性制約のある属性を外部キーと呼ぶ
• 例:履修の科目番号は外部キー
– 外部キー(FK)と主キー(PK)のドメインは同じで
ある必要がある
参照整合性制約の例
従業員
部門
従業員番号 部門番号
氏名
年齢
部門番号
部門名
001
1
尾下 真樹
27
1
開発
002
2
下戸 彩
17
2
営業
003
3
本村 拓哉
30
3
総務
004
1
宇田 ヒカル
20
主キー
主キー
外部キー
この場合、従業員の部門番号は、必ず部門の部門番号
(部門の主キー)に存在する必要がある
→ 参照整合性制約
一貫性制約
• 一貫性制約
– リレーションが満たさなければならない制約
– 個々の属性のドメイン制約だけでなく、複数の属
性値の組が満たさなければいけない条件を含む
•
•
•
•
1つのタップル内での条件
複数のタップルでの条件
1つのリレーション内での条件
複数のリレーションでの条件
– スキーマ定義時に条件を定義しておくことで、制
約に違反するような変更を防ぐことができる
従属性
• 従属性
– 複数の属性値で満たさなければならない制約のひとつ
• 従属性の種類
– 関数従属性
• R(…, X, …, Y, …)で、複数のタプルのX同士が等しければ、
Y同士も等しいこと
• 例:科目(科目名, 担当教官, 単位数 ) X:科目名、 Y:単位数
– 多値従属性、結合従属性など
• 従属性はデータベース設計において重要
– 従属性がきちんと記述されていれば、データ更新時など
に自動的にそれを満たすよう処理できる
– 詳しくは次回の講義で説明
まとめ
• リレーショナルスキーマとリレーション
従業員
スキーマ
従業員番号 部門番号
属性値は各属性
のドメイン制約に
従う
氏名
年齢
001
1
尾下 真樹
27
002
2
下戸 彩
17
003
3
本村 拓哉
30
004
1
宇田 ヒカル
20
インスタンス
主キー 外部キー
(超キー、候補キー)
参照整合性制約
リレーションスキーマは第一正規形を満たす
まとめ
• スキーマとインスタンス
• 表形式による表現
• リレーションスキーマの決まり
– 第1正規形
– 整合性制約
• ドメイン制約、キー制約、参照整合性制約、一貫性制
約、従属性制約
リレーションの操作体系
リレーションの操作
• リレーションの操作
– 主にデータの問い合わせ(検索)に利用
– 複数のリレーションをもとに、求めるデータを新
たなリレーションとして得る
• リレーションの操作体系
– リレーショナル代数とリレーショナル論理式の2
種類の操作体系がある
• どちらでも同様の処理が記述できる
リレーションの操作
• データベースのデータは複数のリレーション
にまたがって格納されている
• リレーションに対する操作を行なって、必要
なデータを出力する必要がある
従業員
部門
従業員番号 部門番号
氏名
年齢
部門番号 部門名
001
1
尾下 真樹
27
1
開発
002
2
下戸 彩
17
2
営業
004
1
宇田 ヒカル
20
例:従業員「尾下真樹」の所属する部門名を知りたい
操作
氏名
部門名
尾下 真樹
開発
リレーション操作体系
• リレーショナル代数
– 基本的な演算子を定義
– 演算子を使った式によって、求めるリレーション
が得られるようにリレーションの操作を記述する
• リレーショナル論理式
– 一階述語理論にもとづき、求めるリレーションの
条件を宣言的に記述する
– リレーショナル論理式には2種類ある
• タプルリレーショナル理論
• ドメインリレーショナル理論
リレーショナル代数
• リレーション同士の演算
– リレーショナルデータベースでは、リレーション同
士の演算によって複雑な検索などの操作を行う
– リレーション同士の演算結果もまたリレーション
になる
– とりあえず体系的な演算を提供している
• 数学的に扱えるということが重要
• 具体的なシステム(プログラム)として実現するときに
は、また別の工夫が必要になる
基本的リレーショナル代数演算子
• 2つのリレーション同士の演算(2項演算)
–和
–差
– 直積
• 単一リレーションに対しての演算(単項演算)
– 射影
– 選択
和
• 和(union)
R  S  t | t  R  t  S
– 2つのリレーションの集合を足し合わせたもの
– 2つのリレーションスキーマは同一でなければな
らない(和両立)
• 次数が同じで、それぞれの属性のドメインも同じ
– 通常、同一のリレーションスキーマが複数あるこ
とはなく、複数の操作結果の加算に使われる
和演算・差演算の例
従業員1
従業員2
従業員番号 部門番号
氏名
年齢
従業員番号 部門番号
氏名
年齢
001
1
尾下 真樹
27
002
2
下戸 彩
17
002
2
下戸 彩
17
005
1
織口 裕二
005
003
3
本村 拓哉
30
004
1
宇田 ヒカル 20
従業員1+従業員2 (和演算)
従業員番号 部門番号
従業員1-従業員2 (差演算)
氏名
年齢
従業員番号 部門番号
氏名
年齢
001
1
尾下 真樹
27
001
1
尾下 真樹
27
002
2
下戸 彩
17
003
3
本村 拓哉
30
003
3
本村 拓哉
30
004
1
宇田 ヒカル 20
004
1
005
1
宇田 ヒカル 20
織口 裕二
005
差
• 差(difference)

R  S  t | t  Rt  S

– 片方のリレーションから、もう一方のリレーション
を引いたもの
– 他は、和演算と同じ
– 通常、同一のリレーションスキーマが複数あるこ
とはなく、複数の操作結果の加算に使われる
直積
• 直積(cartesian product)
R  S   t  u | t  R  u  S
( t  u はタプル t と uを連結したもの)
– リレーションの各タプル同士を全ての組み合わ
せでかけ合わせたリレーションを得る
– もとのリレーション名をつけて属性名を区別
– 単体ではあまり意味がなく、別の演算子(選択
演算子)と組み合わせて使うことが多い
• 結合演算子(詳しくは次に説明)
直積演算の例
従業員
部門
従業員番号 部門番号
年齢
001
1
尾下 真樹
27
002
2
下戸 彩
17
004
1
宇田 ヒカル
20
従業員.
従業員番号

氏名
部門番号 部門名

1
開発
2
営業
従業員.
従業員. 部門.
部門.
従業員.氏名
部門番号
年齢 部門番号 部門名
001
1
尾下 真樹
27
1
開発
002
2
下戸 彩
17
1
開発
004
1
宇田 ヒカル
20
1
開発
001
1
尾下 真樹
27
2
営業
002
2
下戸 彩
17
2
営業
004
1
宇田 ヒカル
20
2
営業
射影
• 射影(projection)
(パイ)
 A ,, A R  tA1,, Am | t  R
1
m
A1,, Am  A1,, An , m  n
– 指定した属性だけを残して他の属性は排除
• テーブルから必要な列(属性)のみを取り出す
– 出力に必要ない属性や、直積で重複した属性を
取り除くためなどに使用
射影演算・選択演算の例
従業員
従業員番号 部門番号

氏名
年齢
001
1
尾下 真樹
27
002
2
下戸 彩
17
003
3
本村 拓哉
30
004
1
宇田 ヒカル
20
氏名, 年齢
(従業員)
 年齢>20 (従業員)
氏名
年齢
従業員番号 部門番号
尾下 真樹
27
001
下戸 彩
17
003
本村 拓哉
30
宇田 ヒカル
20
氏名
年齢
1
尾下 真樹
27
3
本村 拓哉
30
選択は必要なタプル(行)のみを取り出す
射影は必要な属性(列)のみを取り出す
選択
• 選択(selection)
(シグマ)
 F R  t | t  R  PF t 
– 選択条件 F で指定した条件を満たすタプルのみ
を残して、他のタプルは削除
• テーブルから必要な行(タプル)のみを取り出す
– 主にデータの検索処理に使われ、使用頻度は
かなり高い
選択
• 選択の条件(下記のどれかの方法で記述)
– 属性 Ai と 定数 c の比較演算 による比較
Ai  c
– 属性 Ai と 属性 Aj の比較演算子 による比較
Ai  Aj
– 上の2つの論理和()、論理積()、否定()を
用いて組み合わせたもの
• 比較演算子
– は
(シ-タ)
, , , , ,  のどれか
その他のリレーショナル代数演算子
• 結合
• 自然結合
• 共通部分
• 商
結合
• 結合(join)
R F S   F R  S 
– 実際の応用でよく使われる重要な演算子
• 非常に重要!
– 直積と選択を組み合わせた演算子
• 結合の種類
– 等結合(比較演算子が=の場合、よく使われる)
– θ-結合(それ以外の場合)
結合の例
教科書 図3.7
等結合の例
従業員
部門
従業員番号 部門番号
氏名
年齢
001
1
尾下 真樹
27
002
2
下戸 彩
17
004
1
宇田 ヒカル
20

例のように複数
のリレーションの
情報を組み合わ
せるために、結
合が使われる
従業員.
従業員番号
部門番号 部門名
部門番号=
部門番号
1
開発
2
営業
従業員.
従業員. 部門.
部門.
従業員.氏名
部門番号
年齢 部門番号 部門名
001
1
尾下 真樹
27
1
開発
004
1
宇田 ヒカル
20
1
開発
002
2
下戸 彩
17
2
営業
結合は直積と選択の組み合わせで計算される(次スライド)
等結合の例(1.直積演算)
従業員
部門
従業員番号 部門番号
年齢
001
1
尾下 真樹
27
002
2
下戸 彩
17
004
1
宇田 ヒカル
20
従業員.
従業員番号

氏名
部門番号 部門名

1
開発
2
営業
従業員.
従業員. 部門.
部門.
従業員.氏名
部門番号
年齢 部門番号 部門名
001
1
尾下 真樹
27
1
開発
002
2
下戸 彩
17
1
開発
004
1
宇田 ヒカル
20
1
開発
001
1
尾下 真樹
27
2
営業
002
2
下戸 彩
17
2
営業
004
1
宇田 ヒカル
20
2
営業
等結合の例(2.選択演算)
従業員.
従業員番号
 従業員.部門番号
=部門.部門番号
例のように複数
のリレーションの
情報を組み合わ
せるために、結
合が使われる

従業員.
従業員. 部門.
部門.
従業員.氏名
部門番号
年齢 部門番号 部門名
001
1
尾下 真樹
27
1
開発
002
2
下戸 彩
17
1
開発
004
1
宇田 ヒカル
20
1
開発
001
1
尾下 真樹
27
2
営業
002
2
下戸 彩
17
2
営業
004
1
宇田 ヒカル
20
2
営業
従業員.
従業員番号
従業員.
従業員. 部門.
部門.
従業員.氏名
部門番号
年齢 部門番号 部門名
001
1
尾下 真樹
27
1
開発
004
1
宇田 ヒカル
20
1
開発
002
2
下戸 彩
17
2
営業
自然結合
• 自然結合(natural join)


R  S   A1 ,An ,B1 ,Bm ,C1 ,Ck  R.B1 S.B1 R.Bm S.Bm R  S 
R A1, An , B1,Bm , S B1,Bm , C1,Ck 
– これも実際の応用でよく使われる重要な演算子
– 2つのリレーションを同一の属性同士で等結合
し、結合結果から同一の属性を取り除いたもの
• 通常の等結合の結果には、同一の属性値を持つ属
性が重複して存在することになり無駄
自然結合の例
従業員番号 部門番号
氏名
年齢
部門番号 部門名
001
1
尾下 真樹
27
1
開発
002
2
下戸 彩
17
2
営業
004
1
宇田 ヒカル
20
部門番号の同じタプル同士の組み合わせになる
従業員番号 部門番号

氏名
年齢 部門名
001
1
尾下 真樹
27
開発
002
2
下戸 彩
17
営業
004
1
宇田 ヒカル
20
開発
※ 各属性のもとのリレーション名は省略できる
共通部分
• 共通部分(intersection)
R  S  R  R  S 
– 2つのリレーションの共通部分
– 2つのリレーションは、和演算・差演算と同様に
和成立条件を満たさなければならない
– 共通部分は、和演算・差演算により表現可能
– 通常、同一のリレーションスキーマが複数あるこ
とはなく、複数の操作結果の加算に使われる
商
• 商(division, quotient)

 
R  S   A1 ,Am1 R   A1 ,Am1  A1 ,Am1 R S  R
– ただし、リレーション R, S のうち、S の属性は、
R の属性の部分集合
R A1, An , S  Am , An 
– Sのうち、Rを含むものを探し、Rと共通しない属
性の値の集合を求める
– R  S  S  R が成り立つ


商の例
教科書 図3.9
改名演算子
• 改名演算子
(デルタ)
 AB R
– 自然結合や商を適用するために、名前を変える
演算
– 自然結合や商では、属性の名前が一致すること
が条件になるので、属性の名前が異なっている
場合に前もって名前を変更する
リレーショナル代数演算子のまとめ
• 基本的な演算
– 2項演算
• 和、差、直積
– 単項演算
• 射影、選択
• その他の演算
– 2項演算
• 結合、自然結合、共通部分、商
リレーショナル代数演算子の主な用途
• 選択、射影
– 必要なデータ(表の行)や属性(表の列)を取り出すため
に使用
• 結合
– 複数のリレーションを組み合わせるために使用
• 和、差、共通部分
– 複数の演算結果同士を組み合わせるときに使用
• 直積
– 直接は使用しない(結合を定義する上で重要)
• 商(あまり使わない)
リレーショナル代数式
• リレーショナル代数式
– これまでに出てきたリレーショナル代数演算子を
使って、問い合わせを記述したもの
– 各種演算を組み合わせることでいろいろな問い
合わせを記述できる
リレーションの例
教科書 図3.3
リレーショナル代数式の例1
• 科目番号002の履修者の学籍番号と成績の
一覧
π学籍番号,成績 (σ科目番号=‘002’ (履修) )
履修
科目番号
学籍番号
成績
001
00001
90
001
00002
80
00001
90
002
00001
90
00003
70
002
00003
70
学籍番号 成績
リレーショナル代数式の例2
• 学籍番号00001の学生が履修した科目名と
成績の一覧
π科目名,成績 (科目
(σ学籍番号=‘0001’ (履修)))
科目
履修
科目番号
学籍番号
成績
科目番号
科目名
単位
001
00001
90
001
データベース
2
001
00002
80
002
プログラミング
3
002
00001
90
002
00003
70
リレーショナル代数式の例2
• 学籍番号00001の学生が履修した科目名と
成績の一覧
π科目名,成績 (科目
(σ学籍番号=‘0001’ (履修)))
科目番号
学籍番号
成績
科目名
単位
001
00001
90
データベース
2
002
00001
90
プログラミング
3
科目名
成績
データベース
90
プログラミング
90
リレーショナル代数式の例2
• 学籍番号00001の学生が履修した科目名と
成績の一覧
π科目名,成績 (科目
(σ学籍番号=‘0001’ (履修)))
• 別解
– こちらでも良いが、通常は上の書き方をする
– 選択は科目には関係ないので
π科目名,成績 (σ学籍番号=‘0001’ (科目
履修))
リレーショナル代数式のポイント
• ポイントを押さえれば、自分の出力したい
リレーションを代数式で書くのは簡単!
– 選択、射影、結合の組み合わせ
– 最終的に得たい属性を射影で取得
– 最終的に得たい属性を持つリレーションは必ず
入力として必要
– 複数のリレーションは結合を使って組み合わせ
る
– 条件を満たすタプル(行)のみを選択で取り出す
リレーショナル代数式のポイント
• 例:学籍番号00001の学生が履修した科目
名と成績の一覧
– 科目名、成績の属性が必要 → 射影で出力
– 科目名、成績の属性が必要 → 科目、履修の2
つのリレーションが必要 → 結合
– 条件「学籍番号00001の学生が履修」 → 選択
(履修に関する条件なので、履修の前に書く)
π科目名,成績 (科目
(σ学籍番号=‘0001’ (履修)))
π科目名,成績 (σ学籍番号=‘0001’ (科目
履修))
リレーショナル代数式の例3
• 例:科目番号001の科目について、学籍番号
00001の学生よりも成績の良かった学生の
学籍番号の一覧
– 2つの問い合わせの組み合わせ
– 改名演算子が必要になる
リレーショナル代数式の例3
• 例:科目番号001の科目について、学籍番号
00001の学生よりも成績の良かった学生の
学籍番号の一覧
1. 学籍番号00001、科目番号001の成績 → 履修’
2. 科目番号001、履修‘の成績よりも成績が大きい
履修
履修‘
科目番号
学籍番号
成績
科目番号
学籍番号
成績
001
00001
80
001
00001
80
001
00002
70
002
00001
80
(σ科目番号=1∧
001
00003
90
学籍番号=00001
(履修)))
リレーショナル代数式の例3
• 1. 学籍番号00001、科目番号001の成績
(σ科目番号=1∧学籍番号=00001(履修)))
履修
履修‘
科目番号
学籍番号
成績
科目番号
学籍番号
成績
001
00001
80
001
00001
80
001
00002
70
002
00001
80
001
00003
90
リレーショナル代数式の例3
• 2. 科目番号001、履修‘の成績よりも成績が
大きい
– タプル同士の比較なので選択ではなく結合を使う
(σ科目番号=001 (履修)
履修
×
×
○
成績>成績
(履修’))
履修‘
科目番号
学籍番号
成績
科目番号
学籍番号
成績
001
00001
80
001
00001
80
001
00002
70
002
00001
80
001
00003
90
同じリレーション同士の演算では
成績>成績 などと書くと混乱する
ので、改名演算子を用いて区別
リレーショナル代数式の例3
• 2. 科目番号001、履修‘の成績よりも成績が
大きい
(σ科目番号=001 (履修)
成績>成績
(履修’))
– 改名演算子を使って属性名を読み替える
(σ科目番号=1 (履修)
成績<成績’
δ成績←成績‘(履修’))
リレーショナル代数式の例3
• 例:科目番号001の科目について、学籍番号
00001の学生よりも成績の良かった学生の
学籍番号の一覧
1. 学籍番号00001、科目番号001の成績
2. 科目番号001、履修‘の成績よりも成績が大きい
– 改名演算子が必要になる
π学籍番号 (σ科目番号=1 (履修) 成績<成績’
δ成績←成績‘(σ科目番号=1∧学籍番号=00001(履修)))
リレーショナル代数式の例4
• 履修者の全くいない科目の科目番号と科目
名の一覧
– 履修者が1人でもいる科目を取り出す
• 科目と履修の自然結合
• リレーションは集合なので、同じ科目が複数あっても、
射影の時点で重複は取り除かれる
– 全体の科目から引く
• 履修者が一人もいない科目が得られる
π科目名 (科目) - (π科目名 (科目
履修)))
リレーショナル論理式
• リレーショナル代数
– 基本的な演算子を定義
– 演算子を使った式でリレーションの操作を記述
• リレーショナル論理式
– 一階述語理論にもとづき、求めるリレーションの
条件を宣言的に記述
– リレーショナル論理式には2種類ある
• タプルリレーショナル理論
• ドメインリレーショナル理論
リレーショナル論理式
• リレーショナル論理式
– 一階述語理論にもとづき、求めるリレーションの
条件を宣言的に記述
• リレーショナル論理式の種類
– タプルリレーショナル理論
• 求めるリレーションが、どのような条件を満たすタプ
ルの集合かを記述する
– ドメインリレーショナル理論
• 求めるリレーションが、どのような条件を満たす属性
の集合によって定義できるかを記述する
タプルリレーショナル理論
• 求めるリレーションが、どのような条件を満
たすタプルの集合かを記述する
• アトムと式の組み合わせにより記述
タプルリレーショナル理論
• アトム(atom)
Ru
– リレーション
– 属性同士の比較
uAi  v Bj
– 属性と定数値の比較
uAi  c
 
• 式(formula)  (ファイ)
– アトム Ru
– 式の否定  
– 式の論理積・論理和 1  2 , 1  2
– 束縛変数の定義 u u, u u
タプル論理式による代数演算の表現
教科書 p.48
タプルリレーショナル論理式の例
教科書 p.48
タプルリレーショナル論理式の例
教科書 p.49
安全なタプルリレーション論理式
• ドメインの定義(プサイ)
– DOM    式  のドメイン
• 安全な式の条件
教科書 p.50
ドメインリレーショナル理論
• 求めるリレーションが、どのような条件を満
たすドメイン変数(属性)の集合によって定義
できるかを記述する
• ドメイン変数
– 属性のドメインの要素をその値としてとる変数
ドメインリレーショナル理論
• アトム(atom)
– リレーション Rx1,, x1 
– ドメイン変数同士の比較 x  y
– ドメイン変数と定数値の比較 x  c
• 式(formula)
– アトム Ru
– 式の否定  
– 式の論理積・論理和 1  2 , 1  2
– 束縛変数の定義 u u, u u
ドメインリレーショナル理論式の例
教科書 p.51
安全なドメインリレーショナル理論式
• 安全な式の条件  (プサイ)
教科書 p.52
リレーション操作体系のまとめ
• リレーション操作体系
– リレーショナル代数
– リレーショナル論理式
• 両者の比較
– どちらも同等の記述力を持つ(Ullmanの定理)
– どちらもあらゆる操作が記述できるというわけで
はないことに注意 (例:推移的閉包などはどちら
の操作体系でも記述できない)
リレーション操作体系のまとめ
• 実際の操作方法
– 実際のリレーショナルデータベースでは、SQLと
いう言語を使って、よりプログラミング言語に近
い形で問い合わせを記述する
– 代数演算は、リレーショナルモデルがどのような
演算をサポートするかという理論的な操作体系
• 単にリレーショナルデータベースを利用するだけであ
れば不要
• 本格的に利用するためには、内部でどのような演算
が行われるのかを理解しておく必要がある
まとめ
• リレーションスキーマ
– リレーションスキーマ
– リレーションの整合性制約
• リレーションの操作体系
– リレーショナル代数
– リレーショナル代数式
– リレーショナル論理式
次回予告
• リレーショナルデータベースの設計
– データベースの論理設計
• 実体関連モデルから実際のスキーマを設計
– リレーションスキーマの正規化
• データを修正しようとしたときに不具合の生じることの
ないような設計
• 無駄な属性やリレーションのないような設計
– 何らかのデータベースを作ろうと思ったときに、
自分でスキーマを設計できるようになる