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