システム構築 第10回

情報システム構築
第10回 データベース
(Database)
(2007/12/11版)
• 参考書19:
増永良文、「リレーショナルデータベー
ス入門(新訂版)」、サイエンス社
2007年12月13日
2007/12/13
情報システム構築 第10回
1
データベースとは
• データの重要性
例:企業はデータに基づき、企業活動を行っ
ている(セブンイレブンの躍進)
• データベースの重要性
– 必要なデータが迅速に取り出せる
– そのための仕組みが必要
– データの独立(データ処理することと切り離す)
どういうデータがどういう形でほしいといったこと
と分離させておく
• データのベース(基地)
Data Base → Database
2007/12/13
情報システム構築 第10回
2
データベースの重要性
• ファイルシステムからデータベース
プログラムから分離
データのほうが長持ちする(データの内容で
はなく、枠組み)→スキーム
• データ(ベース)の一貫性(integrity)
(consistency)
• データベースの機密保護(security)
セキュリティ
2007/12/13
情報システム構築 第10回
3
データベースの種類
• リレーショナル(関係)データベース
最近では最も普及
最も数学的(形式的)
集合論が基礎となっている
コッド博士 1970年
• ネットワーク型データベース
縦横にポインタ(チェイン、リンク)がはられている
• 階層型データベース
ツリー状にポインタ(チェイン、リンク)がはられている
• オブジェクト指向データベース
最近のオブジェクト指向の考えを取り入れたデータベース
形は階層型データベースに類似する
2007/12/13
情報システム構築 第10回
4
モデリング
• データベースとDBMS
DBMS(Database Management System):
データを操作する(扱う)ためのソフトウェア
例:Oracle、SQL Server、Access、
PostgreSQL、MySQL
データベース:中身、内容
例:企業データ、売上データ、成績データ
• データと情報
データ:数値や文字列
情報:データに意味付けしたもの
往々にして、混同して使われる
2007/12/13
情報システム構築 第10回
5
モデリング
• データモデル
実世界をデータの世界で表現するもの
実世界を記述する記号体系
実世界
社員
データモデルの世界
社員データ
名前、生年月日、本給、
作業時間、・・ ・・
プロジェクトデータ
予定表データ
2007/12/13
情報システム構築 第10回
6
データモデリングの進め方
• データモデル
概念モデル→論理モデル
(Conceptual model) (Logical model)
データモデル
ANSI/X3/SPARC
3層スキーマ
概念モデル
外部スキーマ
論理モデル
概念スキーマ
相当
2007/12/13
情報システム構築 第10回
内部スキーマ
7
データモデリングの進め方
• 概念モデルの表現方法
E-Rモデル(E-R図、実体ー関連モデル)
Entity-Relationship model
実体(entity)
実体型(entity type)
例
学生1
学生(型)
学生2
総体として捉える
全般に学生とは
どういう属性をもっている
学生3
・
・
・
学生n
2007/12/13
オブジェクト指向のクラスにあたる
情報システム構築 第10回
8
データモデリングの進め方
• 概念モデルの表現方法
E-Rモデル(E-R図、実体ー関連モデル)
Entity-Relationship model
関連(relation)
関連型(relation type)
例
学生1、科目1
履修(型)
学生1、科目2
総体として捉える
全般に学生と科目の間には
どういう属性をもっている
学生2、科目1
・
・
・
学生n、科目m
2007/12/13
オブジェクト指向のクラスにあたる
情報システム構築 第10回
9
ER図
• 概念モデルの表現方法
E-Rモデル(E-R図、実体ー関連モデル)
Entity-Relationship model
• 実体の表現 長方形で表現
実体型の名称
学生
学籍番号
氏名
住所
2007/12/13
情報システム構築 第10回
実体型の属性
または属性は楕円で
付属させる
10
ER図
• 概念モデルの表現方法
E-Rモデル(E-R図、実体ー関連モデル)
Entity-Relationship model
• 関連の表現 菱形で表現
関連型の名称
履修
関連型の属性
得点
2007/12/13
情報システム構築 第10回
11
ER図
• EーRモデルの図
実体と関連を同一の図に表現する
基数を書く(関連中心)
関連を中心にして、結合される実体数を表記する
科目数Nに対して学生数M(N,Mは具体的数値でなくても
よい、実際には増減する。)
科目
科目名
単位数
2007/12/13
N
履修
得点
情報システム構築 第10回
M
学生
学籍番号
氏名
住所
12
ER図
• EーRモデルの図
実体と関連を同一の図に表現する
基数を書く(実体中心)
実体を中心にして、関連付け先の実体の数の最小、最大を
表記する
最小結合度、最大結合度による表現(結合度:結合の数)
学科
学科名
教育目標
2007/12/13
1,N
所属
年度
情報システム構築 第10回
1,1
学生
学籍番号
氏名
住所
13
データモデルの表現方法
• 論理モデルの表現方法
リレーショナルデータモデル
ネットワークデータモデル
ハイアラキカルデータモデル
• ここでは、リレーショナルデータモデル
(実際、一番普及している)
表(テーブル)で表現する
2007/12/13
情報システム構築 第10回
14
ERからリレーションへ
• 実体ー関連図をリレーショナルスキーマに変換する
例
学生
学籍番号
学生
学籍番号 学生名 住所
学生名
住所
外部キー
履修
学籍番号 科目名 得点
履修
得点
外部キー
科目名
科目
2007/12/13
科目
科目名 単位数
単位数
情報システム構築 第10回
15
リレーショナルデータベース
• 表による表現
実体も関連も表で表現
科目(実体)
科目
データベース
人工知能
実体型の名称
学生(実体)
単位数
2
1
学籍番号
m121001
m121002
m121003
氏名
何野何夫
何々何子
何川何吉
住所
函館市
札幌市
小樽市
実体型の属性
実体型の属性
実体型の属性
履修(関連)
科目名
データベース
データベース
人工知能
人工知能
2007/12/13
学籍番号
m121001
m121002
m121002
m121003
得点
80
100
50
70
情報システム構築 第10回
16
主キー
• 主キー
候補キー
– 属性の値(属性の値の組)がリレーションのタプ
ルを一意的に特定(同定)できる属性(の組)
「主キー」となりえる候補という意味
– 極小である
属性の組が候補キーになっているとき、その属
性のうち1つでも欠落したら、一意的特定ができ
なくなる
– 最悪
全属性の組み合わせが候補キーとなる
(タプルの重複はないものとする:集合論)
2007/12/13
情報システム構築 第10回
17
主キー
• 候補キー
社員
社員番号
650
1508
231
2034
社員名がA川B夫であるタプル
社員名
A川B夫
B田A朗
A川B夫
C野D子
納品
商品番号
G1
G1
G2
G2
2007/12/13
給与
50
40
60
30
所属
K55
K41
K41
K55
健保番号
80596
81403
80201
81998
顧客番号 納品数量
C1
3
C2
10
C2
5
C3
10
情報システム構築 第10回
18
主キー
• 主キー
候補キーから1つ選ぶ
データベース設計者がどの候補キー(属性)
を第1に捉えるかによる
– キー制約
つねに主キーを構成する属性の値は空値とな
らない
唯一識別能力(候補キーなので、当然)
「つねに」:いかなる(時刻、インスタンス)でも
– アンダーライン
主キーを構成する属性にはアンダーラインを引
く、 納品(商品番号,顧客番号,納品数量)
2007/12/13
情報システム構築 第10回
19
主キー
• 1対多 主キーはH
主キー H
主キー K
教員(実体)
氏名
何野何夫
何々何子
何川何吉
科目(実体)
住所
仙台市
新潟市
東京都
科目名
データベース
人工知能
ネットワーク
離散数学
生年月日
1963・11
1971・2
1968・1
主キー H
担当(関連)
氏名
何野何夫
何野何夫
何々何子
何川何吉
2007/12/13
単位数
2
1
2
1
科目名
データベース
人工知能
ネットワーク
離散数学
得点
80
100
50
70
情報システム構築 第10回
前提:1つの科目を
複数の教員で
担当することはない
20
主キー
• 多対多 主キーは和集合K∪H
主キー H
主キー K
科目(実体)
科目
データベース
人工知能
学生(実体)
単位数
2
1
学籍番号
m121001
m121002
m121003
氏名
何野何夫
何々何子
何川何吉
住所
仙台市
新潟市
東京都
主キー K ∪ H
履修(関連)
科目名
データベース
データベース
人工知能
人工知能
2007/12/13
学籍番号
m121001
m121002
m121002
m121003
得点
80
100
50
70
情報システム構築 第10回
21
外部キー
• 外部キー
企業の総務関係データ
– 社員(社員番号,社員名,給与,所属,・・)
– 部門(部門番号,部門名,部門長,・・)
– 所属は部門に登録されているものか空値
– 部門長は社員に登録されているものか空値
• 外部キー
参照した先が主キーになっている
• 外部キー制約
2007/12/13
情報システム構築 第10回
22
外部キー
• 外部キー
PRIMARY KEY (社員番号),
FOREIGN KEY(所属) REFERENCE 部門(部門番号)
社員
社員番号 社員名
650 A川B夫
1508 B田A朗
231 A川B男
2034 C野D子
部門
部門番号
K55
K41
K33
K21
2007/12/13
給与
50
40
60
30
所属
K55
K41
K41
K55
健保番号
80596
81403
80201
81998
部門名
部門長
営業部
231
設計部
650
製造部
品質保証部
2034
情報システム構築 第10回
23
第1正規形
• 第1正規形(the first normal form, 1NF)
– ドメインがシンプル
– ある属性のドメインが
ドメインの直積ではない
ドメインのべき集合(値の集合)ではない
– 要するに、単純なドメインである
厳密に定義することは難しい
– 入れ子型リレーションではない
リレーションの属性値がリレーション
– 正規化:正規形にすること
– 注:ベキ集合とは部分集合の集合
2007/12/13
情報システム構築 第10回
24
第1正規形
• 第1正規形
– リレーションとはドメインの直積空間(集合)での
部分集合
– 直積空間(集合)で個別に識別できること
– ドメインがシンプルとは、そのドメインが
ドメインの直積
になっていない
ドメインのベキ集合
ドメインの直積のベキ集合
– シンプルなドメイン上で定義されたリレーション
は第1正規形(first normal form, 1NF)
各要素(タプル)が個別に識別できる
2007/12/13
情報システム構築 第10回
25
第1正規形
• 第1正規形
– リピーティンググループ→ 第1正規形から排除
レコードのフィールド値が値の集合
(タプルの属性値)
• 非第1正規形(non-first normal form)
第1正規形でないリレーション
入れ子型リレーション(nested relation)ともい
う
2007/12/13
情報システム構築 第10回
26
第1正規形
• 非(第1)正規形の例(属性が直積)
社員
社員番号
650
1508
231
2034
社員名
給与
(A川,B夫)
(B田,A朗)
(A川,B男)
(C野,D子)
50
40
60
30
所属
K55
K41
K41
K55
• 上記の正規化
社員
社員番号
650
1508
231
2034
2007/12/13
社員名(姓) 社員名(名) 給与
A川
B田
A川
C野
B夫
A朗
B男
D子
情報システム構築 第10回
50
40
60
30
所属
K55
K41
K41
K55
27
第1正規形
• 非(第1)正規形の例(属性が集合)
社員
社員番号
650
1508
231
2034
社員名
A川B夫
B田A朗
A川B男
C野D子
趣味
所属
{読書,音楽,運転} K55
{水泳,華道}
K41
{音楽、水泳}
K41
{読書,華道}
K55
健保番号
80596
81403
80201
81998
• 上記の正規化(集合を分ける)
社員
社員番号
650
650
650
1508
1508
2007/12/13
社員名
A川B夫
A川B夫
A川B夫
B田A朗
B田A朗
趣味
読書
音楽
運転
水泳
華道
情報システム構築 第10回
所属
K55
K55
K55
K41
K41
健保番号
80596
80596
80596
80201
80201
28
スキーマ
• リレーショナルデータベーススキーマ
– リレーショナルスキーマ
インスタンスとしてのリレーションの
時間的に不変な構造的枠組み
– リレーショナルデータベーススキーマ
複数のリレーションの集まり
インスタンスとしてのリレーショナルデータベー
スの
時間的に不変な構造的枠組み
2007/12/13
情報システム構築 第10回
29
スキーマ
• リレーショナルデータベーススキーマ
–
–
–
–
–
データベーススキーマ名
リレーションスキーマ(テーブル)定義×n
ドメイン定義×n
一貫性制約定義
特権定義
誰が、どのリレーションを読み書きできるか
– ビュー定義、他
仮想的なリレーション(物理的に格納されていな
いリレーション)
– 表明、トリガ定義
2007/12/13
情報システム構築 第10回
30
スキーマ
• SQLでは
– スキーマ定義言語(schema definition language)
SDL
– スキーマ操作言語(schema manipulation
language) SML
– として用意されている
– 当然ながら、データベース操作言語(Database
Manupulation Language)も用意されている
2007/12/13
情報システム構築 第10回
31
スキーマ
• 権限付与と剥奪
– リレーションレベルの権限
GRANT INSERT,DELETE ON 社員 TO U008
操作の種類
テーブル名 ユーザ
REVOKE INSERT,DELETE ON 社員 TO U008
– データベーススキーマレベルの権限
CREATE SCHEMA 新しいスキーマ
AUTHORIZATION ユーザ
2007/12/13
情報システム構築 第10回
32
SQLの歴史
• SQLのあゆみ (ISO)
– 1970 コッド博士の論文
– 1974 SEQUEL(IBM: System R)
(Structured English Query Language)
(シーキュール)
– 1976 SEQUEL2
– 1982 ISOにて標準化スタート
– 1987 SQL87
– 1989 SQL89
– 1992 SQL2 = SQL92
– 1999 SQL3 = SQL99
2007/12/13
情報システム構築 第10回
33
データベース演算(操作)
• データモデルの3つの要素
構造記述
一貫性制約の記述
データ操作言語
• データ操作言語
(Data Manipulation Language) DML
• リレーショナルデータベース
複数のリレーションの集まり
リレーション:実体:実世界のデータ
関連:データ間の関連
2007/12/13
情報システム構築 第10回
34
データベース演算(操作)
• データベースとの相互作用
– 質問(query)、問合せ
リレーショナルデータベースに質問して答えをも
らう
– 更新(update)
タプルの削除
タプルの追加
タプルの属性値の修正
– 質問、問合せのほうが多く使用される
– 問合せ機能の体系化
2007/12/13
情報システム構築 第10回
35
データベース演算(操作)
• データ操作言語による問い合わせ
社員
社員番号
650
1508
231
2034
社員名
A川B夫
B田A朗
A川B男
C野D子
給与
50
40
60
30
所属
K55
K41
K41
K55
健保番号
80596
81403
80201
81998
• 給与が50以上の社員の社員名と所属
結果リレーション
社員名
所属
A川B夫 K55
A川B男 K41
2007/12/13
情報システム構築 第10回
36
データベース演算(操作)
• 結果リレーションの再帰性
問い合わせした結果がまたリレーションになってい
る
結果リレーション
社員名
所属
A川B夫 K55
A川B男 K41
• 実リレーション、基本リレーション
データベースに格納されているリレーション
• ビュー(仮想的なリレーション)
格納されていないが、使用する上でリレーションを
定義できる、それがビュー
2007/12/13
情報システム構築 第10回
37
データベース演算(操作)
• 給与が50以上 (選択)
中間リレーション
社員番号 社員名
650 A川B夫
1508 B田A朗
231 A川B男
2034 C野D子
給与
50
40
60
30
所属
K55
K41
K41
K55
健保番号
80596
81403
80201
81998
• 属性の社員名と所属のみ切り出す(射影)
中間リレーション
社員番号 社員名
650 A川B夫
1508 B田A朗
231 A川B男
2034 C野D子
2007/12/13
給与
50
40
60
30
所属
K55
K41
K41
K55
情報システム構築 第10回
健保番号
80596
81403
80201
81998
38
データベース演算(操作)
• データ操作言語
データベースの中のデータを操作するため
の言語
データを操作するとは、データの問合わせ
や更新を行うこと、すなわち、必要なデータ
をデータベースから入出力すること
人
データベース
データ操作
2007/12/13
情報システム構築 第10回
プログラム
main()
39
データベース演算(操作)
• リレーショナル代数
リレーショナルデータベースを操作するため
の方法(操作言語)
リレーショナルデータ操作言語
• データ操作言語を代数とよぶ理由
リレーショナルデータベースの場合、
データ操作を集合論に基づく、代数的手法
(すなわち数学的演算)で行うことができる
ので
2007/12/13
情報システム構築 第10回
40
データベース演算(操作)
• リレーショナル代数の枠組(演算の種類)
• 4つの集合演算
–
–
–
–
和集合演算
差集合演算
共通集合演算
直積集合演算
• 4つのリレーショナル代数の演算
–
–
–
–
射影演算
選択演算
結合演算
商演算
2007/12/13
情報システム構築 第10回
41
データベース演算(操作)
• 8つの演算は必ずしも独立ではない
• 例:共通集合を差集合で表す
R
S
R-S
R∩S
S-R
R∩S=R-(R-S)
2007/12/13
情報システム構築 第10回
42
データベース演算(操作)
• 結合演算は直積演算と選択演算
• 商演算は直積演算、射影演算、差演算
• リレーショナル代数は5つの演算(独立)
–
–
–
–
–
和集合演算
差集合演算
直積演算
射影演算
選択演算
2007/12/13
情報システム構築 第10回
43
データベース演算(操作)
• 和両立(union compatible)
– リレーションR(A1,A2,・・・,An)
– リレーションS(B1,B2,・・・,Bm)
(1) RとSの次数が等しい
n=m
(2) 各i(1≦i≦n)AiとBiのドメインが等
しい
dom(Ai)=dom(Bi)
2007/12/13
情報システム構築 第10回
44
データベース演算(操作)
• 和集合演算(union)
–
–
–
–
–
–
–
–
リレーションR
リレーションS
RとSは和両立
RとSの和(和集合)とは
R∪S={t|t∈R ∨t∈S}
∨は論理和をあらわす論理記号
t∈R ∨t∈Sはtを変数とする命題、
すなわち述語(predicate)
リレーションはタプルを要素とする集合
結果リレーションの属性名のつけかた
2007/12/13
情報システム構築 第10回
45
データベース演算(操作)
• 差集合演算(difference)
–
–
–
–
リレーションR
リレーションS
RとSは和両立
RとSの差(差集合)とは
RーS={t|t∈R ∧ ┓(t∈S)}
– ∧は論理積、 ┓は否定をあらわす論理記号
– t∈R ∧ ┓(t∈S)はtを変数とする命題、
すなわち述語(predicate)
– Rにあって、Sに属していないタプル
2007/12/13
情報システム構築 第10回
46
データベース演算(操作)
• 共通集合演算(intersection)
–
–
–
–
リレーションR
リレーションS
RとSは和両立
RとSの共通(共通集合)とは
R∩S={t|t∈R ∧ t∈S}
– ∧は論理積をあらわす論理記号
– t∈R ∧ t∈Sはtを変数とする命題、すな
わち述語(predicate)
– Rにも、Sに属しているタプル
2007/12/13
情報システム構築 第10回
47
データベース演算(操作)
• 直積集合演算(direct product)
– リレーションR(A1,A2,・・・,An)
– リレーションS(B1,B2,・・・,Bm)
(nとmが等しくなくてもよい、ドメインは同じでな
くてもよい)
– RとSの直積(直積集合)とは
R×S={(r,s)|r∈R ∧ s∈S}
n+m次のリレーション
(r,s)はn+m項のタプル
– ∧は論理積をあらわす論理記号
– r∈R ∧ s∈S はr、sを変数とする命題、
すなわち述語(predicate)
2007/12/13
情報システム構築 第10回
48
データベース演算(操作)
• 直積集合演算(direct product)
– 結果リレーションの属性名
どちらから来たものか明確にしておく必要があ
る(R、Sの中に同じ属性名がありうるので)
– 修飾
リレーションRから来た属性Aなら
R.Aと表す
リレーションSから来た属性Aなら
S.Aと表す
– RとSが同じRならば、左右を明示する
RをRL、SをRRと書く
2007/12/13
情報システム構築 第10回
49
データベース演算(操作)
• 直積集合演算(direct product)
社員
社員番号
650
1508
231
2034
社員名
A川B夫
B田A朗
A川B男
C野D子
給与
部門
部門番号 部門名
K55
データベース
K41
人工知能
2007/12/13
50
40
60
30
所属
K55
K41
K41
K55
部門長
650
1508
情報システム構築 第10回
50
データベース演算(操作)
• 直積集合演算(direct product)
社員×部門
社員.社員番
号
社員.社員名 社員.給与
650
650
1508
1508
231
231
2034
2034
2007/12/13
A川B夫
A川B夫
B田A朗
B田A朗
A川B男
A川B男
C野D子
C野D子
50
50
40
40
60
60
30
30
社員.所属
部門.部門番
号
部門.部門名
K55
K55
K41
K41
K41
K41
K55
K55
K55
K41
K55
K41
K55
K41
K55
K41
情報システム構築 第10回
データベース
人工知能
データベース
人工知能
データベース
人工知能
データベース
人工知能
部門.部門長
650
1508
650
1508
650
1508
650
1508
51
データベース演算(操作)
• 射影(projection)
縦方向に切り出す
指定した属性のみをもってくる
• タプルの重複はない
リレーションは集合であるから
• 例
リレーション供給の属性集合{供給元、部
品}上の射影
2007/12/13
情報システム構築 第10回
52
データベース演算(操作)
• 例:リレーション供給の
属性集合{供給元、部品}上の射影
供給
供給元
A11
A11
A11
A12
A12
A13
A13
A13
2007/12/13
部品
P101
P102
P102
P102
P103
P101
P102
P103
供給先
K55
K51
K41
K41
K51
K41
K51
K51
情報システム構築 第10回
供給[供給元,部品]
供給元
部品
A11
P101
A11
P102
A12
P102
A12
P103
A13
P101
A13
P102
A13
P103
53
データベース演算(操作)
• 例:リレーション供給の
属性集合{供給元、部品}上の射影
供給
供給元
A11
A11
A11
A12
A12
A13
A13
A13
2007/12/13
部品
P101
P102
P102
P102
P103
P101
P102
P103
供給先
K55
K51
K41
K41
K51
K41
K51
K51
タプルの重複はない
情報システム構築 第10回
このタプルは不要
供給[供給元,部品]
供給元
部品
A11
P101
A11
P102
A11
P102
A12
P102
A12
P103
A13
P101
A13
P102
A13
P103
集合だから
54
データベース演算(操作)
• 射影(projection) フォーマルな定義
• リレーションR(A1,A2,・・・,An)
Rの全属性集合{A1,A2,・・・,An}の
部分集合を X とする
X={Ai1,Ai2,・・・,Aik}
1≦i1<i2<・・・<ik≦n
Rの全属性集合
Rの属性の部分集合
X
2007/12/13
A1 A2 A3
Ai1 Ai2
情報システム構築 第10回
An
Ain
55
データベース演算(操作)
• 射影(projection) フォーマルな定義
• RのX上の射影
R[X]、またはR[Ai1,Ai2,・・・,Aik]
R[Ai1,Ai2,・・・,Aik]
={u|u∈dom(Ai1)× dom(Ai2) × ・・・ × dom(Aik) ∧
(∃t∈R)(t[Ai1]=u[Ai1] ∧ t[Ai2]=u[Ai2] ∧ ・・・
∧ t[Aik]=u[Aik])
R の中に存在する(∃)元(ゲン、要素)のタプルを、
指定する属性で、もってきているという意味、
∃は存在作用素
2007/12/13
情報システム構築 第10回
56
データベース演算(操作)
• 属性名
元の属性名を使用する
• タプル
t=(a1,a2,・・・,an) を
R(A1,A2,・・・,An) のタプルとする
XはRの全属性集合の部分集合
X={Ai1,Ai2,・・・,Aik}
tのX上の射影
(ai1,ai2,・・・,aik) k次のタプル
t[X]と表す
またはt[Ai1,Ai2,・・・,Aik]
2007/12/13
情報システム構築 第10回
57
データベース演算(操作)
• 選択(selection)
横方向に切り出す
条件を満たすタプルのみをもってくる
• 制限(restriction)ともいう
2007/12/13
情報システム構築 第10回
58
データベース演算(操作)
• θー比較可能(θ- comparable)
• 2つの属性がθー比較可能とは
• リレーションR(A1,A2,・・・,An)
属性AiとAjとがθー比較可能とは、
(1)dom(Ai)=dom(Aj)
(2)Rの任意のタプルについて、
t[Ai]θt[Aj]の真偽が常に定まる
2項の述語 t[Ai]θt[Aj]がtのAi値とtのAj値がθの関係に
あるとき真、そうでないとき偽
θは具体的には>,≧,=,≦,<,≠
読み方、大なり、以上、等号、以下、小なり、不等号
2007/12/13
情報システム構築 第10回
59
データベース演算(操作)
• θー比較可能の例
商品
商品番号
G110
G120
G130
G140
G150
商品名
原価
売価
定価
刺身
600
500
980
豆腐
90
75
120
卵
95
100
140
コーヒー豆
700
860
860
ケーキ
200
250
300
θー比較可能ではない
2007/12/13
θー比較可能
情報システム構築 第10回
60
データベース演算(操作)
• θー選択(θ- selection)演算
• リレーションR(A1,A2,・・・,An)
• Rの属性 Ai と Aj 上のθー選択とは、
R[Ai θ Aj]
={t|t∈R ∧ t[Ai]θt[Aj]}
θ選択は
タプルtのAi成分 t[Ai] と
タプルtのAj成分 t[Aj] とが
θの関係にあるタプルを選択すること
2007/12/13
情報システム構築 第10回
61
データベース演算(操作)
• θー選択の例
商品[原価>売価]
商品番号 商品名
原価
売価
定価
G110
刺身
600
500
980
G120
豆腐
90
75
120
G130
卵
95
100
140
G140
コーヒー豆
700
860
860
G150
ケーキ
200
250
300
θー選択、> ー選択
商品[原価>売価]
商品番号 商品名
G110
刺身
G120
豆腐
2007/12/13
原価
売価
600
90
情報システム構築 第10回
定価
500
75
980
120
62
データベース演算(操作)
• θー選択演算(1つの属性と一定値)
• リレーションR(A1,A2,・・・,An)
• 2つの属性 Ai と Aj 上のθー選択
→ 1つの属性でのθー選択
• リレーションR(A1,A2,・・・,An)の属性Ai
の値 t[Ai]と値c に関するθー選択の定義
R[Aiθc]={t|t∈R∧t[Ai]θc}
2007/12/13
情報システム構築 第10回
63
データベース演算(操作)
• θー選択演算(1つの属性と一定値)
• 定値リレーションの導入
直積演算、θー選択、射影演算
(1)定値リレーション CONST
属性C、値c
(2)
直積
θー選択
R[Ai θ c]
=((R×CONST)[R.Ai θ CONST.C])
[A1,A2,・・・,An]
射影(属性Cを除去)
2007/12/13
情報システム構築 第10回
64
データベース演算(操作)
• 結合(join)
タプルとタプルのつながりは、属性値を介し
て陰(implicit)に表されている
陰⇔陽(explicit)
• CODASYL
親子集合、ポインタ
陽に表されている
2007/12/13
情報システム構築 第10回
65
データベース演算(操作)
• 結合(join)
θー結合(θーjoin)
• リレーションR(A1,A2,・・・,An)
リレーションS(B1,B2,・・・,Bm)
AiとBjをθー比較可能な属性
• RとSのAiとBj上のθー結合の定義
R[AiθBj]S
={(t,u)|t∈R∧u∈S∧
t[Ai]θu[Bj]}
• 等結合(equi-join)
θが等号(=)のとき
2007/12/13
情報システム構築 第10回
66
データベース演算(操作)
• 等結合の例
(2つのリレーション社員、部門の結合)
社員
社員番号
650
1508
231
2034
社員名
A川B夫
B田A朗
A川B男
C野D子
給与
部門
部門番号 部門名
K55
データベース
K41
人工知能
2007/12/13
情報システム構築 第10回
50
40
60
30
所属
K55
K41
K41
K55
部門長
650
1508
67
データベース演算(操作)
• 等結合の例
(2つのリレーション社員、部門の結合)
社員[所属=部門番号]部門
社員.社員番
社員.給 社員.所
号
社員.社員名 与
属
650
1508
231
2034
2007/12/13
A川B夫
B田A朗
A川B男
C野D子
50
40
60
30
K55
K41
K41
K55
部門.部
門番号
部門.部門名
K55
K41
K41
K55
データベース
人工知能
人工知能
データベース
情報システム構築 第10回
部門.部門
長
650
1508
1508
650
68
データベース演算(操作)
• >ー結合(greater than join)の例
(同じリレーションどうしの結合の場合)
社員[給与>給与]社員
社員.社
員番号
社員.給 社員.所
社員.社員名 与
属
650
650
1508
231
231
231
A川B夫
A川B夫
B田A朗
A川B男
A川B男
A川B男
50
50
40
60
60
60
K55
K55
K41
K41
K41
K41
社員.社
員番号
1508
2034
2034
650
1508
2034
社員Lを社員と表記
2007/12/13
情報システム構築 第10回
社員.社員名
B田A朗
C野D子
C野D子
A川B夫
B田A朗
C野D子
社員.給 社員.所
与
属
40
30
30
50
40
30
K41
K55
K55
K55
K41
K55
社員Rを社員と表記
69
データベース演算(操作)
• θー結合は直積演算とθー選択演算で定義する
ことができる
• リレーションR(A1,A2,・・・,An)
リレーションS(B1,B2,・・・,Bm)
AiとBjをθー比較可能な属性
• RとSのAiとBj上のθー結合の定義
R[AiθBj]S
=(R×S)[R.Ai θ S.Bj]
直積
θー選択
Rの属性AiとAj上のθー選択
2007/12/13
情報システム構築 第10回
R[Ai θ Aj]
70
データベース演算(操作)
• θー結合演算の概念を
k個の属性の組み合わせに拡張
• リレーションR(A1,A2,・・・,An)
リレーションS(B1,B2,・・・,Bm)
からk個の属性の組
(Ai1,Bi1’),
θ1ー比較可能
(Ai2,Bi2’),
θ2ー比較可能
・・・,
(Aik,Bik’)
θkー比較可能
• RとSのこれらの属性の組の上の結合
2007/12/13
情報システム構築 第10回
71
データベース演算(操作)
• 結合:属性の組の例
社員
社員番号
650
1508
231
2034
2007/12/13
社員名
A川B夫
B田A朗
A川B男
C野D子
年齢 給与
47
50
50
40
45
60
30
30
情報システム構築 第10回
所属
K55
K41
K41
K55
72
データベース演算(操作)
• 結合:属性の組の例
社員[年齢<年齢,給与>給与]社員
社員.社
員番号
社員.
社員.社員名 年齢
650 A川B夫
231 A川B男
231 A川B男
47
45
45
社員.給 社員.所
与
属
50 K55
60 K41
60 K41
社員.社
員番号
社員.社員名
1508 B田A朗
650 A川B夫
1508 B田A朗
社員Lを社員と表記
2007/12/13
情報システム構築 第10回
社員. 社員.給 社員.所
年齢 与
属
50
47
50
40 K41
50 K55
40 K41
社員Rを社員と表記
73
データベース演算(操作)
• 自然結合(natural join)
• リレーションR(A1,A2,・・・,An)
リレーションS(B1,B2,・・・,Bm)
共通の属性(結合属性)C1,C2,・・・,Ck
dom(R.Ci)=dom(S.Ci)とする
• RとSの自然結合(R*S)
R*S={(t,v)|t∈R ∧
v∈dom(D1)× dom(D2)× ・・・ × dom(Dm-k) ∧
(∃u∈S)(t[C1]=u[C1] ∧・・・∧t[Ck]=u[Ck] ∧
v[D1]=u[D1]∧・・・∧ v[Dm-k]=u[Dm-k]) }
ただし
{B1,B2,・・・,Bm} - {C1,C2,・・・,Ck} = {D1,D2,・・・,Dm-k}
2007/12/13
情報システム構築 第10回
74
データベース演算(操作)
• 自然結合の例
結合属性は部門番号
社員
社員番号
650
1508
231
2034
社員名
A川B夫
B田A朗
A川B男
C野D子
給与
部門
部門番号 部門名
K55
データベース
K41
人工知能
2007/12/13
情報システム構築 第10回
50
40
60
30
部門番号
K55
K41
K41
K55
部門長
650
1508
75
データベース演算(操作)
• 自然結合の例
社員*部門
社員番号 社員名
650 A川B夫
1508 B田A朗
231 A川B男
2034 C野D子
2007/12/13
給与
50
40
60
30
部門番号
K55
K41
K41
K55
情報システム構築 第10回
部門名
部門長
データベース
650
人工知能
1508
人工知能
1508
データベース
650
76
データベース演算(操作)
• 自然結合(natural join)
• インナー結合
• アウター結合
2007/12/13
情報システム構築 第10回
77
データベース演算(操作)
• 商(division)
• リレーションR(A1,A2,・・・,An-m,B1,B2,・・・,Bm)
リレーションS(B1,B2,・・・,Bm)
Rはn次、Sはm次(n>m)
• RをSで割った商 R÷Sは
R÷S={t|t∈R[A1,A2,・・・,An-m] ∧
(∀u∈S)((t,u)∈R)}
ただし
∀は全称作用素で、すべての(for all)を表す
2007/12/13
情報システム構築 第10回
78
データベース演算(操作)
• 商(division)
t
u
• リレーションR(A1,A2,・・・,An-m, B1,B2,・・・,Bm)
リレーションS(B1,B2,・・・,Bm)
Rはn次、Sはm次(n>m)
• RをSで割った商 R÷Sは
R÷S={t|t∈R[A1,A2,・・・,An-m] ∧
(∀u∈S)((t,u)∈R)}
ただし
∀は全称作用素で、すべての(for all)を表す
• Rのタプルをtとuにわけ、Sの各タプルのすべてのuに
対応しているtの集合
2007/12/13
情報システム構築 第10回
79
データベース演算(操作)
• 商の例
部品供給 R
供給元A1 部品B1
A11
P101
A11
P102
A12
P102
A12
P103
A13
P101
A13
P102
A13
P103
2007/12/13
必要部品 S
部品B1
P101
P102
部品供給÷必要部品
情報システム構築 第10回
R÷S
供給元
A11
A13
80
データベース演算(操作)
• 商の検算(?)例 (R÷S)×S
必要部品 S
部品B1
P101
P102
部品供給÷必要部品
R÷S
供給元
A11
A13
2007/12/13
部品供給 R
供給元A1 部品B1
A11
P101
A11
P102
A13
P101
A13
P102
情報システム構築 第10回
81
データベース演算(操作)
• 商の例
部品供給 R
供給元A1 部品B1
t1
u1
t1
u2
t2
u2
t2
u3
t3
u1
t3
u2
t3
u3
2007/12/13
必要部品 S
部品B1
u1
u2
部品供給÷必要部品
情報システム構築 第10回
R÷S
供給元
t1
t3
82
正規形
• 第1正規形
各タプルの各属性値が
– 集合ではない
– ベクトルのような値の並び(複合値)ではない
• リレーショナルデータベース
DB={R1,R2,・・・,Rn}
(リレーション内、リレーション間で一貫性制約)
• R1 ,R2,・・・,Rnが第1正規形である
これで十分か?
→十分ではない(更新時異状が噴出)
→高次の正規化が必要
2007/12/13
情報システム構築 第10回
83
正規形
• 第1正規形で十分ではない例
注文
顧客名
A商店
Bマート
Bマート
C社
商品名
数量
テレビ
テレビ
洗濯機
餅つき機
3
10
5
1
単価
金額
198,000
594,000
198,000 1,980,000
59,800
299,000
29,800
29,800
主キーは{顧客名,商品名}
2007/12/13
情報システム構築 第10回
84
正規形
• 第1正規形で十分ではない例
タプル挿入時異状
注文
顧客名
A商店
Bマート
Bマート
C社
ー
商品名
数量
単価
金額
テレビ
3 198,000
594,000
テレビ
10 198,000 1,980,000
洗濯機
5
59,800
299,000
餅つき機
1
29,800
29,800
電子レンジ
ー
74,800
ー
主キー(顧客名,商品名)の顧客名が空値
挿入できない
2007/12/13
情報システム構築 第10回
85
正規形
• 第1正規形で十分ではない例
タプル削除時異状
注文
顧客名
A商店
Bマート
Bマート
C社
商品名
数量
テレビ
テレビ
洗濯機
餅つき機
3
10
5
1
単価
金額
198,000
594,000
198,000 1,980,000
59,800
299,000
29,800
29,800
餅つき機,単価29,800の情報が失われる
2007/12/13
情報システム構築 第10回
86
正規形
• 第1正規形で十分ではない例
タプル修正時異状(1)
注文
顧客名
A商店
Bマート
Bマート
C社
商品名
数量
テレビ
テレビ
洗濯機
餅つき機
3
10
5
1
単価
金額
198,000
594,000
198,000 1,980,000
59,800
299,000
29,800
29,800
テレビの単価が148000に変更になったとき
修正が2箇所に及ぶ
2007/12/13
情報システム構築 第10回
87
正規形
• 第1正規形で十分ではない例
タプル修正時異状(2)
注文
顧客名
A商店
Bマート
Bマート
C社
商品名
数量
テレビ
テレビ
洗濯機
餅つき機
3
10
5
1
単価
金額
198,000
594,000
198,000 1,980,000
59,800
299,000
29,800
29,800
餅つき機から洗濯機に変更すると,餅つき機の
単価情報が失われる
2007/12/13
情報システム構築 第10回
88
正規形
• 更新時異状の原因
• 2つの異なる事象のデータが1つのリレー
ションに格納されているから
• 2つの事象
– どの顧客がどの商品を何個注文したか
– ある商品の単価
• それなら分解すればよい
これをone fact in one relationといったりする
2007/12/13
情報システム構築 第10回
89
正規形
• 分解(decomposition)
注文
顧客名
A商店
Bマート
Bマート
C社
商品名 数量
テレビ
テレビ
洗濯機
餅つき機
注文[顧客名,商品名,数量,金額]
顧客名 商品名 数量
金額
A商店 テレビ
3 594,000
Bマート テレビ
10 1,980,000
Bマート 洗濯機
5 299,000
C社
餅つき機
1 29,800
2007/12/13
単価
金額
3 198,000 594,000
10 198,000 1,980,000
5 59,800 299,000
1 29,800
29,800
リレーション 注文の
属性集合{顧客名,商
品名,数量,金額}上
の射影
情報システム構築 第10回
90
正規形
• 分解
注文
顧客名
A商店
Bマート
Bマート
C社
商品名 数量
テレビ
テレビ
洗濯機
餅つき機
単価
金額
3 198,000 594,000
10 198,000 1,980,000
5 59,800 299,000
1 29,800
29,800
リレーション 注文の
属性集合{商品名,単
価}上の射影
2007/12/13
情報システム構築 第10回
注文[商品名,単価]
商品名 単価
テレビ
198,000
テレビ
198,000
洗濯機
59,800
餅つき機
29,800
91
• 分解
注文
顧客名
A商店
Bマート
Bマート
C社
正規形
商品名 数量
テレビ
テレビ
洗濯機
餅つき機
単価
金額
3 198,000 594,000
10 198,000 1,980,000
5 59,800 299,000
1 29,800
29,800
注文[顧客名,商品名,数量,金額]
顧客名 商品名 数量
金額
A商店 テレビ
3 594,000
Bマート テレビ
10 1,980,000
Bマート 洗濯機
5 299,000
C社
餅つき機
1 29,800
2007/12/13
情報システム構築 第10回
注文[商品名,単価]
商品名
単価
テレビ
198,000
洗濯機
59,800
餅つき機
29,800
92
正規形
• 分解(何も考慮せず、無作為の分解)
注文
顧客名
A商店
Bマート
Bマート
C社
注文[顧客名,商品名]
顧客名 商品名
A商店 テレビ
Bマート テレビ
Bマート 洗濯機
C社
餅つき機
2007/12/13
商品名 数量
テレビ
テレビ
洗濯機
餅つき機
単価
金額
3 198,000 594,000
10 198,000 1,980,000
5 59,800 299,000
1 29,800
29,800
注文[商品名,数量,単価,金額]
商品名 数量
単価
金額
テレビ
3 198,000 594,000
テレビ
10 198,000 1,980,000
洗濯機
5 59,800 299,000
餅つき機
1 29,800
29,800
情報システム構築 第10回
93
正規形
• 自然結合(結合属性:商品名)をとる
注文[顧客名,商品名]
顧客名 商品名
A商店 テレビ
Bマート テレビ
Bマート 洗濯機
C社
餅つき機
注文
顧客名
A商店
A商店
Bマート
Bマート
Bマート
C社
2007/12/13
注文[商品名,数量,単価,金額]
商品名 数量
単価
金額
テレビ
3 198,000 594,000
テレビ
10 198,000 1,980,000
洗濯機
5 59,800 299,000
餅つき機
1 29,800
29,800
商品名
数量
テレビ
テレビ
テレビ
テレビ
洗濯機
餅つき機
3
10
3
10
5
1
単価
金額
198,000
594,000
198,000 1,980,000
198,000
594,000
198,000 1,980,000
59,800
299,000
29,800
29,800
情報システム構築 第10回
意味のな
意味のな
いタプル
いタプル
結合のわな
94
正規形
• リレーションの情報無損失分解
• 無損失ではない例
注文を{顧客名,商品名}、{商品名,数量,
単価,金額}上の射影として分解すると、
自然結合の結果、意味のないタプルが出現
する
この現象を結合のわなという
2007/12/13
情報システム構築 第10回
95
正規形
• 情報損失分解(先の例を次のように分解)
R1
A1
テレビ
テレビ
洗濯機
餅つき機
R
B1
A商店
A商店
Bマート
Bマート
Bマート
C社
2007/12/13
R2
A1
C1
テレビ
テレビ
洗濯機
餅つき機
B1
A商店
Bマート
Bマート
C社
A1
C1
テレビ
テレビ
テレビ
テレビ
洗濯機
餅つき機
3
10
3
10
5
1
C2
C3
3 198,000 594,000
10 198,000 1,980,000
5 59,800 299,000
1 29,800
29,800
C2
C3
198,000
594,000
198,000 1,980,000
198,000
594,000
198,000 1,980,000
59,800
299,000
29,800
29,800
情報システム構築 第10回
意味のな
意味のな
いタプル
いタプル
元のRに無い
「結合のわな」
96
正規形
• 多値従属性の例(参考書19p.87)
フライト
フライト番号 クルー名
55
P
55
S
55
P
55
S
55
P
55
S
乗客名
A
A
B
B
C
C
• one fact in one relationに反している
• クルーの変更、乗客の追加、削除などが生
じると「フライト」の変更が煩雑になる
2007/12/13
情報システム構築 第10回
97
• 多値従属性の例
正規形
フライト
フライト番号 クルー名
55
P
55
S
55
P
55
S
55
P
55
S
クルー
フライト番号 クルー名
55
P
55
S
55
P
55
S
55
P
55
S
2007/12/13
乗客名
A
A
B
B
C
C
フライト番号が決ま
れば、複数のク
ルー名が決まる
(多値従属)
フライト番号が決ま
れば、複数の乗客
名が決まる
(多値従属)
乗客
フライト番号 乗客名
55
A
55
A
55
B
55
B
55
C
55
C
情報システム構築 第10回
98
正規形
• 多値従属性の例
フライト
フライト番号 クルー名
55
P
55
S
55
P
55
S
55
P
55
S
クルー
フライト番号 クルー名
55
P
55
S
2007/12/13
乗客名
A
A
B
B
C
C
乗客
フライト番号 乗客名
55
A
55
B
55
C
情報システム構築 第10回
99
正規形
• 関数従属性
関数(写像)関係
・
・
・
・
・
・
・
・
A1,A2,・・ ・・,Al
B1,B2,・・ ・・,Bm
注:ここでの「関数」は「写像」と同義
2007/12/13
情報システム構築 第10回
100
正規形
• 関数従属性
関数的に決定する
関数的に従属する
決定子、被決定子
関数従属性
A1A2・・・・Al → B1B2・・・・Bm
が存在すると
A・・・・はB・・・・を関数的に決定する
B・・・・はA・・・・に関数的に従属する
A・・・・を決定子という、B・・・・を被決定子という
2007/12/13
情報システム構築 第10回
101
正規形
• 関数従属性の例
• 顧客は同一商品を重複しては注文しないと
する(主キーのキー制約に違反するので)
注文
顧客名
A商店
Bマート
Bマート
C社
Bマート
C社
2007/12/13
商品名
数量
テレビ
テレビ
洗濯機
餅つき機
テレビ
餅つき機
3
10
5
1
5
2
単価
金額
198,000
594,000
198,000 1,980,000
59,800
299,000
29,800
29,800
198,000
990,000
29,800
59,600
情報システム構築 第10回
102
正規形
• 関数従属性の例
注文
顧客名
A商店
Bマート
Bマート
C社
•
•
•
•
•
商品名 数量
テレビ
テレビ
洗濯機
餅つき機
単価
金額
3 198,000 594,000
10 198,000 1,980,000
5 59,800 299,000
1 29,800
29,800
f1:{顧客名,商品名}→数量
f2:商品名→単価
f3:{商品名,数量}→金額
f4:{数量,単価}→金額
f5:{数量,金額}→単価
2007/12/13
情報システム構築 第10回
103
第2正規形
• 第2正規形でない例(候補キー(主キー)の
部分集合に関数従属しているスキーマ)
非第2正規形
注文
顧客名
商品名
A商店
テレビ
Bマート
テレビ
Bマート
洗濯機
C社
餅つき機
Dスーパー パン焼機
数量
3
10
5
1
2
単価
198,000
198,000
59,800
29,800
29,800
• 候補キーの部分集合に関数従属している
(単価は商品名に関数従属している)
2007/12/13
情報システム構築 第10回
104
第2正規形
• 第2正規形への分解
注文数量
顧客名
商品名
数量
A商店
テレビ
Bマート
テレビ
Bマート
洗濯機
C社
餅つき機
Dスーパー パン焼機
商品単価
商品名
単価
テレビ
198,000
テレビ
198,000
洗濯機
59,800
餅つき機
29,800
パン焼機
29,800
掃除機
9,800
3
10
5
1
2
商品の追加OK
2007/12/13
情報システム構築 第10回
105
第3正規形
• 第3正規形
(1)Rは第2正規形である
(2)Rのすべての非キー属性はRのいかなる
候補キーにも推移的に従属しない
2007/12/13
情報システム構築 第10回
106
第3正規形
• 第3正規形ではない
社員
社員番号
650
1508
231
2034
2100
2007/12/13
社員名
給与
所属
阿部昭博
50 K55
斎藤美恵子
40 K41
神田茂
60 K41
渡辺和代
40 K55
鶴窪隆博
40 K58
情報システム構築 第10回
勤務地
神奈川
東京
東京
神奈川
静岡
107
第3正規形
• 第3正規形ではない
タプル挿入時異状
社員
社員番号
650
1508
231
2034
2100
社員名
給与
所属
阿部昭博
50 K55
斎藤美恵子
40 K41
神田茂
60 K41
渡辺和代
40 K55
鶴窪隆博
40 K58
K45
勤務地
神奈川
東京
東京
神奈川
静岡
千葉
キー制約にふれる
2007/12/13
情報システム構築 第10回
108
第3正規形
• 第3正規形ではない
タプル削除時異状
社員
社員番号
650
1508
231
2034
2100
社員名
給与
所属
阿部昭博
50 K55
斎藤美恵子
40 K41
神田茂
60 K41
渡辺和代
40 K55
鶴窪隆博
40 K58
勤務地
神奈川
東京
東京
神奈川
静岡
K58、静岡が失われる
2007/12/13
情報システム構築 第10回
109
第3正規形
• 第3正規形ではない
タプル修正時異状
K41が東京から千葉に変更
鶴窪の所属がK58からK55に変更
社員
社員番号
650
1508
231
2034
2100
社員名
給与
所属
阿部昭博
50 K55
斎藤美恵子
40 K41
神田茂
60 K41
渡辺和代
40 K55
鶴窪隆博
40 K58
勤務地
神奈川
東京
東京
神奈川
静岡
K58、静岡が失われる
2007/12/13
情報システム構築 第10回
110
第3正規形
• 第3正規形ではない例
社員
社員番号
650
1508
231
2034
2100
社員名
給与
所属
阿部昭博
50 K55
斎藤美恵子
40 K41
神田茂
60 K41
渡辺和代
40 K55
鶴窪隆博
40 K58
勤務地
神奈川
東京
東京
神奈川
静岡
社員番号→勤務地という関数従属性は
社員番号→所属 ∧ 所属→勤務地 ⇒ 社員番号→勤務地
導出された推移的関数従属性
2007/12/13
111
情報システム構築 第10回
第3正規形
• 第3正規形に分解
社員[社員番号,社員名,給与,所属]
社員番号 社員名
給与 所属
650 阿部昭博
50 K55
1508 斎藤美恵子
40 K41
231 神田茂
60 K41
2034 渡辺和代
40 K55
2100 鶴窪隆博
40 K58
2007/12/13
情報システム構築 第10回
社員[所属,勤務地]
所属
勤務地
K55
神奈川
K41
東京
K41
東京
K55
神奈川
K58
静岡
112
ボイスコッド正規形
• ボイスコッド正規形(BCNF)
• 3NFであるが,BCNFではない例
SCT
学生名
三枝義典
三枝義典
三浦郁子
田母神裕子
student,course,teacher
科目名
データベース
数式処理
データベース
認知科学
教官名
増永良文
佐々木顕正
穂高義介
田畑隆一
• 主キー {学生名,科目名}
科目を担当する教官は複数
その中から1人を選ぶ
• 教官は1科目のみ担当
2007/12/13
情報システム構築 第10回
113
ボイスコッド正規形
• ボイスコッド正規形
• 3NFであるが,BCNFではない例
SCT
学生名
三枝義典
三枝義典
三浦郁子
田母神裕子
2007/12/13
科目名
データベース
数式処理
データベース
認知科学
教官名
増永良文
佐々木顕正
穂高義介
田畑隆一
情報システム構築 第10回
114
ボイスコッド正規形
• ボイスコッド正規形
• 3NFであるが,BCNFではない例
• タプル挿入時の異状
SCT
学生名
三枝義典
三枝義典
三浦郁子
田母神裕子
2007/12/13
科目名
データベース
数式処理
データベース
認知科学
CG
教官名
増永良文
佐々木顕正
穂高義介
田畑隆一
A氏
情報システム構築 第10回
115
ボイスコッド正規形
• ボイスコッド正規形
• 3NFであるが,BCNFではない例
• タプル削除時の異状
SCT
学生名
三枝義典
三枝義典
三浦郁子
田母神裕子
2007/12/13
科目名
データベース
数式処理
データベース
認知科学
教官名
増永良文
佐々木顕正
穂高義介
田畑隆一
情報システム構築 第10回
116
ボイスコッド正規形
• ボイスコッド正規形
• 3NFであるが,BCNFではない例
• タプル修正時の異状
SCT
学生名
三枝義典
三枝義典
三浦郁子
田母神裕子
科目名
データベース
数式処理
データベース
認知科学
教官名
増永良文
佐々木顕正
穂高義介
田畑隆一
認知科学
履修科目の変更
2007/12/13
情報システム構築 第10回
117
ボイスコッド正規形
SCT
学生名
三枝義典
三枝義典
三浦郁子
田母神裕子
科目名
データベース
数式処理
データベース
認知科学
教官名
増永良文
佐々木顕正
穂高義介
田畑隆一
• ボイスコッド正規形への分解
SCT[学生名,教官名]
学生名
教官名
三枝義典
増永良文
三枝義典
佐々木顕正
三浦郁子
穂高義介
田母神裕子 田畑隆一
2007/12/13
SCT[教官名,科目名]
教官名
科目名
増永良文
データベース
佐々木顕正 数式処理
穂高義介
データベース
田畑隆一
認知科学
情報システム構築 第10回
118
第4正規形
• 第4正規形
• 関数従属性を用いた正規形
第2,第3正規形
• 決定子を候補キーに限定した正規形
ボイスコッド正規形
• 多値従属性に着目した正規形
第4正規形
2007/12/13
情報システム構築 第10回
119
第4正規形
• 第4正規形
• 多値従属性 フライト番号→→クルー名|乗客名
直交
フライト
フライト番号 クルー名
55
P
55
P
55
P
55
S
55
S
55
S
505
P'
505
S'
2007/12/13
乗客名
A
B
C
A
B
C
A'
A'
情報システム構築 第10回
120
第4正規形
• 第4正規形に正規化
クルー
フライト番号 クルー名
55
P
55
S
505
P'
505
S'
2007/12/13
乗客
フライト番号 乗客名
55
A
55
B
55
C
505
A'
情報システム構築 第10回
121
データベース言語SQL
基本機能
• リレーショナル代数
集合論
• リレーショナル論理
述語論理
• リレーショナル完備
• よりユーザーフレンドリーなインターフェース
• そこでSQL
Structured Query Language
そのルーツはIBM社SEQUEL
Structured English Query Language
2007/12/13
情報システム構築 第10回
122
データベース言語SQL
基本機能
• リレーショナル代数やリレーショナル論理に
不足している機能
• 合計,平均,最大,といった自然な質問
集約関数の導入
• プログラミング言語との連携
• データベース言語
データ操作言語,定義機能を含む
• SQLは
ISOの国際規格
JISの国内規格
2007/12/13
情報システム構築 第10回
123
データベース言語SQL
基本機能
• リレーショナルデータベース言語の標準化
IBM サンノゼ研究所 SEQUEL
カリフォルニア大学 INGRES QUEL
IBM ワトソン研究所QBE
• データベース言語がバラバラである弊害
–
–
–
–
使用方法の習熟
ソフトウェアの書き換え
分散型データベースへの対応
選択
2007/12/13
情報システム構築 第10回
124
データベース言語SQL
基本機能
• ANSI(American National Standards
Institute)
アメリカ国家規格協会 1980年
• ISO(International Organization for
Standardization) http://www.iso.ch
国際標準化機構 (標準=規格)
1982年からスタート
1987年ISO9075 (ISO規格,ISO標準)
1987年JIS X 3005 (JIS規格,JIS標準)
ISO87→89→92→99
2007/12/13
情報システム構築 第10回
125
データベース言語SQL
基本機能
• SQLによる質問(問合せ)
• リレーショナルデータモデル
属性,タプル,リレーション
• SQL
列(column),行(row),表(table)
• 実表,ビュー表,導出表(問合せ結果)
• SQLの表では,重複したタプルの存在も可
マルチ集合
2007/12/13
情報システム構築 第10回
126
データベース言語SQL
基本機能
• SQLによる質問(問合せ)
具体的な質問をすること
「問合せを指定する」
問合せ指定
• 問合せ指定の基本形
これは大事まず
SELECT 選択リスト
FROM 表参照リスト SELECT、FROM、
WHERE
WHERE 探索条件
と丸暗記しよう
2007/12/13
情報システム構築 第10回
127
データベース言語SQL
基本機能
• SELECT 値式リスト
リレーション代数の「射影」に相当
リレーション代数の「選択」には相当しない
リレーション代数の「選択」は
WHERE 探索条件が相当する
• 選択リスト
値式(ちしき)(あたいしき)
列名(属性名)を指定
ただし簡単な計算を指定することもできる
例 「給与」,「給与*2」
複数指定可能
2007/12/13
情報システム構築 第10回
128
データベース言語SQL
基本機能
• FROM 表参照リスト
実表の名前
ビュー表の名前
複数指定可能
• WHERE 探索条件
m変数の述語,命題関数
• 導出表
結果リレーション
2007/12/13
情報システム構築 第10回
129
• 例
社員
社員番号
650
1508
231
2034
2100
データベース言語SQL
基本機能
社員名
給与
所属
阿部昭博
50 K55
斎藤美恵子
40 K41
神田茂
60 K41
渡辺和代
40 K55
鶴窪隆博
40 K58
• SELECT 社員名
FROM 社員
WHERE 所属=’K55’
• 導出表(結果)
2007/12/13
情報システム構築 第10回
勤務地
神奈川
東京
東京
神奈川
静岡
社員名
阿部昭博
渡辺和代
130
データベース言語SQL
基本機能
• 表(SQL)とリレーション(理論)の違い
• データ型(ドメインに対応)
– 文字列型
– 概数型
– 真数型
• 集約関数のサポート
COUNT、SUM、AVG、MAX、MIN
• DISTINCT,GROUP-BY,HAVING,
ORDER-BY
• BETWEEN,IN,LIKE,NULL,EXISTS
• 親言語への組み込み
2007/12/13
情報システム構築 第10回
131
データベース言語SQL
基本機能
• 単純質問(単純問合せ)
商品
商品番号
G1
G2
G3
商品名
テレビ
洗濯機
テレビ
定価
198000
59800
98000
納品
商品番号
G1
G1
G2
G2
G3
顧客番号
C1
C2
C2
C3
C3
納品数量
3
10
5
10
2
2007/12/13
情報システム構築 第10回
顧客
顧客番号
C1
C2
C3
顧客名
A商店
Bマート
C社
132
データベース言語SQL
基本機能
• (a)全商品の全属性
SELECT * --*はすべて
FROM 商品
導出表
商品
商品番号
G1
G2
G3
2007/12/13
商品名
テレビ
洗濯機
テレビ
定価
198000
59800
98000
情報システム構築 第10回
133
データベース言語SQL
基本機能
• (b)納品した商品の商品番号
SELECT 商品番号
FROM 納品
導出表
納品
商品番号
G1
G1
G2
G2
G3
重複がある
重複がある
• どの商品が延べ何回取引されたかわかる
2007/12/13
情報システム構築 第10回
134
データベース言語SQL
基本機能
• (c)納品した商品の商品番号,重複なし
SELECT DISTINCT 商品番号
FROM 納品
導出表
納品
商品番号
G1
G2
G3
2007/12/13
重複がない
情報システム構築 第10回
135
データベース言語SQL
基本機能
• (d)商品番号,定価,2割引の値段
SELECT 商品番号,定価,定価*0.8
FROM 商品
• 導出表
商品
商品番号
G1
G2
G3
商品名
テレビ
洗濯機
テレビ
定価
198000
59800
98000
158400
47840
78400
• 列の名前はつかない
2007/12/13
情報システム構築 第10回
136
データベース言語SQL
基本機能
• (e)定価が10万以上の商品の全列の値
SELECT *
FROM 商品
WHERE 定価≧100000
• 導出表
商品
商品番号 商品名
G1
テレビ
2007/12/13
定価
198000
情報システム構築 第10回
137
データベース言語SQL
基本機能
• (e)定価が6万以上、20万以下の商品の全
列の値
SELECT *
FROM 商品
WHERE 定価 BETWEEN 60000 AND
200000
• 導出表
商品
商品番号 商品名
G1
テレビ
G3
テレビ
2007/12/13
定価
198000
98000
情報システム構築 第10回
138
データベース言語SQL
基本機能
• (e)定価が6万以上、20万以下の商品で、
商品名がテレビの全列の値
SELECT *
FROM 商品
WHERE 定価 BETWEEN 60000 AND
200000
AND 商品名=N’テレビ’
• 導出表
2007/12/13
商品
商品番号 商品名
G1
テレビ
G3
テレビ
情報システム構築 第10回
定価
198000
98000
139
データベース言語SQL
基本機能
• (f)商品を定価の安いから高い順
SELECT *
FROM 商品
ORDER BY 定価 ASC --ASCは省略可
(ascent)
• 導出表
商品
商品番号
G2
G3
G1
2007/12/13
商品名
洗濯機
テレビ
テレビ
定価
59800
98000
198000
情報システム構築 第10回
140
データベース言語SQL
基本機能
• (f)商品を定価の高いから安い順
SELECT *
FROM 商品
ORDER BY 定価 DESC --DESCはこの順
でならべたいとき省略不可
(descent)
• 導出表
商品
商品番号
G1
G3
G2
2007/12/13
商品名
テレビ
テレビ
洗濯機
定価
198000
98000
59800
情報システム構築 第10回
141
データベース言語SQL
基本機能
• (g)納品した商品の総数を商品番号ごとに
SELECT 商品番号,SUM(納品数量)
FROM 納品
GROUP BY 商品番号
• 導出表
商品
商品番号
G1
G2
G3
2007/12/13
13
15
2
情報システム構築 第10回
142
データベース言語SQL
基本機能
• (g)納品した商品の総数を商品番号ごとに、
納品数量が10以上
SELECT 商品番号,SUM(納品数量)
FROM 納品
GROUP BY 商品番号
HAVING SUM(納品数量) ≧10
• 導出表
2007/12/13
商品
商品番号
G1
G2
13
15
情報システム構築 第10回
143
データベース言語SQL
高度な問合せ指定機能
• 結合質問(join query)
リレーショナル代数の結合(join)に相当
表参照リストに2つ以上指定
• 例「商品の商品番号と納品した商品の商品
番号が等しい商品情報(商品の全属性値)
と納品情報のすべての組を求めよ」
(商品表と納品表の等結合(equi-join)を属
性,商品番号上でとる)
2007/12/13
情報システム構築 第10回
144
データベース言語SQL
高度な問合せ指定機能
• 結合質問(join query)
• 等結合(equi-join)の例
SELECT 商品.*,納品.*
FROM 商品,納品
WHERE 商品.商品番号=納品.商品番号
2007/12/13
情報システム構築 第10回
145
データベース言語SQL
高度な問合せ指定機能
• 使用する表
商品
商品番号
G1
G2
G3
納品
商品番号
G1
G1
G2
G2
G3
2007/12/13
商品名
テレビ
洗濯機
テレビ
顧客番号
C1
C2
C2
C3
C3
定価
198000
59800
98000
顧客
顧客番号
C1
C2
C3
顧客名
A商店
Bマート
C社
納品数量
3
10
5
10
2
情報システム構築 第10回
146
データベース言語SQL
高度な問合せ指定機能
• 等結合 商品.商品番号=納品.商品番号
商品
商品番号
G1
G2
G3
商品名
テレビ
洗濯機
テレビ
定価
198000
59800
98000
納品
商品番号
G1
G1
G2
G2
G3
顧客番号
C1
C2
C2
C3
C3
納品数量
3
10
5
10
2
2007/12/13
情報システム構築 第10回
147
データベース言語SQL
高度な問合せ指定機能
• 等結合
例:「商品の商品番号と納品した商品の商品番号が等し
い商品の全データと納品データの全ての組を求めよ」
SELECT 商品.*,納品.*
FROM 商品,納品
WHERE 商品.商品番号=納品.商品番号
商品
商品番号
G1
G1
G2
G2
G3
2007/12/13
商品名
テレビ
テレビ
洗濯機
洗濯機
テレビ
定価
198000
198000
59800
59800
98000
納品
商品番号
G1
G1
G2
G2
G3
情報システム構築 第10回
顧客番号
C1
C2
C2
C3
C3
納品数量
3
10
5
10
2
148
データベース言語SQL
高度な問合せ指定機能
• 自然結合(natural join)の例
例:「商品データとそれを納入した顧客番号と納品数量を
全て求めよ」
SELECT 商品.*,顧客番号,納品数量
FROM 商品,納品
WHERE 商品.商品番号=納品.商品番号
商品
商品番号
G1
G1
G2
G2
G3
2007/12/13
商品名
テレビ
テレビ
洗濯機
洗濯機
テレビ
定価
198000
198000
59800
59800
98000
顧客番号
C1
C2
C2
C3
C3
情報システム構築 第10回
納品数量
3
10
5
10
2
149
データベース言語SQL
高度な問合せ指定機能
• 3つの表の自然結合
例:「納品状況を示す全ての商品名と顧客名と納品数量
の組を求めよ」
SELECT 商品名,顧客名,納品数量
FROM 商品,納品,顧客
WHERE 商品.商品番号=納品.商品番号
AND
納品.顧客番号=顧客.顧客番号
商品名
テレビ
テレビ
洗濯機
洗濯機
テレビ
2007/12/13
顧客名
A商店
Bマート
Bマート
C社
C社
納品数量
3
10
5
10
2
情報システム構築 第10回
150
データベース言語SQL
高度な問合せ指定機能
• 自己結合(self-join)の例
同じ表を使用する
例:「上司よりも高給をとっている社員の社員番号とその
上司の社員番号を求めよ」
SELECT X.社員番号,Y.社員番号
FROM 社員 X,社員 Y
WHERE X.部長=Y.社員番号
AND
X.給与>Y.給与
社員
社員番号
650
1508
231
2034
2007/12/13
社員名
給与
所属
阿部昭博
50 K55
斎藤美恵子
40 K41
神田茂
60 K41
渡辺和代
40 K55
情報システム構築 第10回
部長
650
1508
1508
650
151
データベース言語SQL
高度な問合せ指定機能
• 自己結合(self-join)
同じ表を使用する
SELECT X.社員番号,Y.社員番号
FROM 社員 X,社員 Y
WHERE X.部長=Y.社員番号
AND
X.給与>Y.給与
社員
社員番号 社員名 給与
650 阿部昭博
1508 斎藤美恵子
231 神田茂
2034 渡辺和代
2007/12/13
所属
50 K55
40 K41
60 K41
40 K55
部長
650
1508
1508
650
社員
社員番号 社員名 給与
650 阿部昭博
1508 斎藤美恵子
1508 斎藤美恵子
650 阿部昭博
情報システム構築 第10回
所属
50 K55
40 K41
40 K41
50 K55
部長
650
1508
1508
650
152
データベース言語SQL
高度な問合せ指定機能
• 自己結合(self-join)
同じ表を使用する
SELECT X.社員番号,Y.社員番号
FROM 社員 X,社員 Y
WHERE X.部長=Y.社員番号
AND
X.給与>Y.給与
• 相関名またはタプル変数 X,Y
社員
社員
社員番号 社員番号
231
1508
2007/12/13
情報システム構築 第10回
153
データベース言語SQL
高度な問合せ指定機能
• 入れ子型質問 内側の問合せ
副問合せ
外側の問合せは主問合せ
• 例
SELECT 顧客番号,顧客名
FROM 顧客
WHERE 顧客番号 IN
(SELECT 顧客番号
FROM 納品
WHERE 商品番号=’G1’)
主問合せ
2007/12/13
副問合せ
情報システム構築 第10回
154
データベース言語SQL
高度な問合せ指定機能
• SQLのリレーショナル完備性
すくなくともリレーショナル代数(リレーショ
ナル論理)と同等な質問機能をもっている
とき、リレーショナル完備という
和
差
直積
射影
選択
2007/12/13
情報システム構築 第10回
155
データベース言語SQL
高度な問合せ指定機能
• 和 R∪S
SELECT *
FROM R
UNION
SELECT *
FROM S
ただし,RとSは和両立
2007/12/13
情報システム構築 第10回
156
データベース言語SQL
高度な問合せ指定機能
• 差 R-S
SELECT *
FROM R
WHERE NOT EXISTS
(SELECT *
FROM S)
ただし,RとSは和両立
2007/12/13
情報システム構築 第10回
157
データベース言語SQL
高度な問合せ指定機能
• 直積 R×S
SELECT R.*, S.*
FROM R,S
2007/12/13
情報システム構築 第10回
158
データベース言語SQL
高度な問合せ指定機能
• 射影 R[Ai1,Ai2,・・ ・・,Aik]
SELECT Ai1,Ai2,・・ ・・,Aik
FROM R
2007/12/13
情報システム構築 第10回
159
データベース言語SQL
高度な問合せ指定機能
• 選択 R[Ai θ Aj]
SELECT *
FROM R
WHERE Ai θ Aj
2007/12/13
情報システム構築 第10回
160
データベース言語SQL
高度な問合せ指定機能
• 更新操作
– 新しい行の挿入
– 不要となった行の削除
– 行の書き換え
2007/12/13
情報システム構築 第10回
161
データベース言語SQL
高度な問合せ指定機能
• 新しい行の挿入
表R(A1,A2,・・ ・・,An)に
行(・・,a1’,a2’,・・ ・・,ap’・・)
を挿入する
列名の指定(A1’,A2’,・・ ・・,Ap’)
以外の属性値は空値
INSERT
INTO
R(A1’,A2’,・・ ・・,Ap’)
VALUES (a1’,a2’,・・ ・・,ap’)
2007/12/13
情報システム構築 第10回
162
データベース言語SQL
高度な問合せ指定機能
• 削除
DELETE
FROM
WHERE
2007/12/13
R
探索条件
情報システム構築 第10回
163
データベース言語SQL
高度な問合せ指定機能
• 書き換え
UPDATE R
SET
A1’=式1
A2’=式2
・・ ・・
Ap’=式p
WHERE 探索条件
2007/12/13
情報システム構築 第10回
164
データベース言語SQL
高度な問合せ指定機能
• 埋め込み型SQL
プログラムからSQLを使用する
SQLでは、PL/Ⅰ、C、COBOL、FORTR
AN、ADA、MUMPS、PASCALがホスト
言語(親言語)として規定されている
EXEC SQLで始まり、 ; で終わる
SQL文
;
プリプロセッサが処理する
2007/12/13
情報システム構築 第10回
165
データベース言語SQL
高度な問合せ指定機能
• 埋め込み型SQL
• データの渡し方
次のBEGINからENDで挟み込んだところ
で、SQLと親言語両方で使用される変数
を定義する
埋め込みSQLで使用するとき : をつける
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;
2007/12/13
情報システム構築 第10回
166
データベース言語SQL
高度な問合せ指定機能
• 埋め込み型SQL
• データの渡し方
INTO(SELECTした属性の値を、プログラ
ムの中の変数に入れ込む)
• カーソルの使い方
• エラーの受け渡し
SQLSTATE、SQLCODE
2007/12/13
情報システム構築 第10回
167
データベース言語SQL
高度な問合せ指定機能
• 埋め込み型SQL
• カーソルの使い方
カーソルを定義(DECLARE CURSOR F
OR この次にSQL文)
カーソルを開く(OPEN)
1行をとりだす(FETCH)
(複数の行はダメ、複数の属性はOK)
現在行の属性値を変数に入れる(INTO)
カーソルを閉じる(CLOSE)
2007/12/13
情報システム構築 第10回
168
データベース言語SQL
高度な問合せ指定機能
• 埋め込み型SQLの例(C言語)
#include ”stdio.h”
main( ) {
….
float z, sdev;
….
EXEC SQL BEGIN DECLARE SECTION;
char SQLSTATE(5), y(3);
float sal;
EXEC SQL END DECLARE SECTION;
y=” K55 ”;
z=0.0;
EXEC SQL DECLARE sal_cursor CURSOR FOR
SELECT 給与
FROM 社員
WHERE 部門=y;
2007/12/13
情報システム構築 第10回
169
データベース言語SQL
高度な問合せ指定機能
• 埋め込み型SQLの例(C言語)
EXEC SQL OPEN sal_cursor;
while (strcmp (SQLSTATE, ”00000”)
{
EXEC SQL FETCH sal_cursor
INTO :sal;
z=z+sal*sal;
}
EXEC SQL CLOSE sal_cursor;
sdev=sqrt(z);
printf (“\n standard deviation of salary is %7.0f \n” , sdev);
}
2007/12/13
情報システム構築 第10回
170
データベース言語SQL
高度な問合せ指定機能
• 埋め込み型SQLの例(PHP言語)
<?php
//データベース接続文字列を作成
$db = mysqli_connect(“localhost”,“root”,“secret”,“whdb2”);
または
$db = mysql_connect(“localhost”,“root”,“secret”);
$seldb = mysql_select_db(“whdb2”);
//SQLコマンドを作成
$query = “select * from product order by prdid”;
//問い合わせを実行してリザルトセットを取得
$result = mysqli_query($db, $query);
または
$result = mysql_query( $query);
?>
2007/12/13
情報システム構築 第10回
171
データベース言語SQL
高度な問合せ指定機能
• 埋め込み型SQLの例(PHP言語)
製品リスト(productlist) テーブル全件表示 <BR>
<TABLE border="1">
<TR><TD>製品ID</TD><TD>カテゴリ1</TD><td>カテゴリ2</td><td>カテゴリ
3</td><td>メーカー</td><td>製品名称</td><td>型番</td></TR>
<?php
while ($row = mysqli_fetch_array($result)){
print(
'<tr><td>'.$row["prdid"].
'</td><td>'.$row["category1"].
'</td><td>'.$row["category2"].
'</td><td>'.$row["category3"].
'</td><td>'.$row["maker"].
'</td><td>'.$row["prdname"].
'</td><td>'.$row["model"].
'</td></tr>');
}
mysqli_free_result($result);
mysqli_close($db)
?>
2007/12/13
情報システム構築 第10回
172
まとめと次回
• データベース
• 次回
• プロジェクト管理
2007/12/13
情報システム構築 第10回
173