173
2007/12/13 情情情情情情情情 情10情 1 情 10 情 情情情情情情 Database) 情情 (2007/12/11) • 情情情19: 情情情情 情情情情情情情情情情情情情情情 情情 )、 情情情情情情 情情 情 情情 情 情 20071213 情情情情情情情情

第 10 回 データベース ( Database) (2007/12/11版)

  • Upload
    zola

  • View
    56

  • Download
    0

Embed Size (px)

DESCRIPTION

情報システム構築. 第 10 回 データベース ( Database) (2007/12/11版). 参考書19: 増永良文、「リレーショナルデータベース入門(新訂版)」、 サイエンス社. 2007年12月13日. データベースとは. データの重要性 例:企業はデータに基づき、企業活動を行っている(セブンイレブンの躍進) データベースの重要性 必要なデータが迅速に取り出せる そのための仕組みが必要 データの独立(データ処理することと切り離す) どういうデータがどういう形でほしいといったことと分離させておく - PowerPoint PPT Presentation

Citation preview

Page 1: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 1

第 10 回 データベース( Database)

(2007/12/11版)• 参考書19:

増永良文、「リレーショナルデータベース入門(新訂版)」、サイエンス社

2007年12月13日

情報システム構築

Page 2: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 2

データベースとは• データの重要性

例:企業はデータに基づき、企業活動を行っている(セブンイレブンの躍進)

• データベースの重要性– 必要なデータが迅速に取り出せる– そのための仕組みが必要– データの独立(データ処理することと切り

離す)どういうデータがどういう形でほしいといったことと分離させておく

• データのベース(基地)Data Base → Database

Page 3: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 3

データベースの重要性• ファイルシステムからデータベース

プログラムから分離データのほうが長持ちする(データの内容ではなく、枠組み)→スキーム

• データ(ベース)の一貫性(integrity)(consistency)

• データベースの機密保護(security)セキュリティ

Page 4: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 4

データベースの種類• リレーショナル(関係)データベース

最近では最も普及最も数学的(形式的)集合論が基礎となっているコッド博士 1970年

• ネットワーク型データベース縦横にポインタ(チェイン、リンク)がはられている

• 階層型データベースツリー状にポインタ(チェイン、リンク)がはられている

• オブジェクト指向データベース最近のオブジェクト指向の考えを取り入れたデータベース形は階層型データベースに類似する

Page 5: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 5

モデリング• データベースとDBMS

DBMS(Database Management System) :データを操作する(扱う)ためのソフトウェア例: Oracle 、 SQL Server 、 Access 、 PostgreSQL 、 MySQLデータベース:中身、内容例:企業データ、売上データ、成績データ

• データと情報データ:数値や文字列情報:データに意味付けしたもの往々にして、混同して使われる

Page 6: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 6

モデリング• データモデル

実世界をデータの世界で表現するもの実世界を記述する記号体系

実世界社員

社員データ名前、生年月日、本給、作業時間、・・ ・・

プロジェクトデータ

予定表データ

データモデルの世界

Page 7: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 7

データモデリングの進め方• データモデル

概念モデル→論理モデル( Conceptual model) (Logical model)

ANSI/X3/SPARC3 層スキーマ

外部スキーマ

概念スキーマ

内部スキーマ

論理モデル

概念モデル

データモデル

相当

Page 8: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 8

データモデリングの進め方• 概念モデルの表現方法

E-Rモデル(E-R図、実体ー関連モデル)Entity-Relationship model

実体 (entity) 実体型 (entity type)

学生1

学生2

学生3

学生n

・・

学生(型)総体として捉える

全般に学生とはどういう属性をもっている

オブジェクト指向のクラスにあたる

Page 9: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 9

データモデリングの進め方• 概念モデルの表現方法

E-Rモデル(E-R図、実体ー関連モデル)Entity-Relationship model

関連 (relation) 関連型 (relation type)

学生1、科目1

学生1、科目2

学生2、科目1

学生n、科目m

・・

履修(型)総体として捉える

全般に学生と科目の間にはどういう属性をもっている

オブジェクト指向のクラスにあたる

Page 10: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 10

ER図• 概念モデルの表現方法

E-Rモデル(E-R図、実体ー関連モデル)Entity-Relationship model

• 実体の表現 長方形で表現

学生

学籍番号氏名住所

実体型の名称

実体型の属性

または属性は楕円で付属させる

Page 11: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 11

ER図• 概念モデルの表現方法

E-Rモデル(E-R図、実体ー関連モデル)Entity-Relationship model

• 関連の表現 菱形で表現

履修

得点

関連型の名称

関連型の属性

Page 12: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 12

ER図• EーRモデルの図

実体と関連を同一の図に表現する基数を書く(関連中心)

学生学籍番号氏名住所

科目科目名単位数

履修

得点

MN

関連を中心にして、結合される実体数を表記する科目数Nに対して学生数M(N,Mは具体的数値でなくてもよい、実際には増減する。)

Page 13: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 13

ER図• EーRモデルの図

実体と関連を同一の図に表現する基数を書く(実体中心)

学生学籍番号氏名住所

学科学科名

教育目標

所属

年度 1,1

1,N

実体を中心にして、関連付け先の実体の数の最小、最大を表記する最小結合度、最大結合度による表現(結合度:結合の数)

Page 14: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 14

データモデルの表現方法• 論理モデルの表現方法

リレーショナルデータモデルネットワークデータモデルハイアラキカルデータモデル

• ここでは、リレーショナルデータモデル(実際、一番普及している)表(テーブル)で表現する

Page 15: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 15

ERからリレーションへ• 実体ー関連図をリレーショナルスキーマに変換する

学生

学籍番号

学生名

住所

科目科目名

単位数

履修得点

履修学籍番号 科目名 得点

学籍番号 学生名学生

住所

科目科目名 単位数

外部キー

外部キー

Page 16: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 16

リレーショナルデータベース• 表による表現

実体も関連も表で表現

科目 単位数データベース 2人工知能 1

学籍番号 氏名 住所m121001 何野何夫 函館市m121002 何々何子 札幌市m121003 何川何吉 小樽市

科目(実体)

学生(実体)

実体型の名称

実体型の属性実体型の属性

実体型の属性

科目名 学籍番号 得点データベース m121001 80データベース m121002 100人工知能 m121002 50人工知能 m121003 70

履修(関連)

Page 17: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 17

主キー• 主キー候補キー– 属性の値(属性の値の組)がリレーションの

タプルを一意的に特定(同定)できる属性(の組)「主キー」となりえる候補という意味

– 極小である属性の組が候補キーになっているとき、その属性のうち1つでも欠落したら、一意的特定ができなくなる

– 最悪全属性の組み合わせが候補キーとなる(タプルの重複はないものとする:集合論)

Page 18: 第 10 回 データベース ( Database) (2007/12/11版)

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夫であるタプル

Page 19: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 19

主キー• 主キー候補キーから1つ選ぶデータベース設計者がどの候補キー(属性)を第1に捉えるかによる– キー制約つねに主キーを構成する属性の値は空値とならない唯一識別能力(候補キーなので、当然)「つねに」:いかなる(時刻、インスタンス)でも

– アンダーライン主キーを構成する属性にはアンダーラインを引く、 納品(商品番号,顧客番号,納品数量)

Page 20: 第 10 回 データベース ( Database) (2007/12/11版)

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つの科目を複数の教員で

担当することはない

Page 21: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 21

主キー• 多対多 主キーは和集合K∪H

科目 単位数データベース 2人工知能 1

学籍番号 氏名 住所m121001 何野何夫 仙台市m121002 何々何子 新潟市m121003 何川何吉 東京都

科目(実体)

学生(実体)

科目名 学籍番号 得点データベース m121001 80データベース m121002 100人工知能 m121002 50人工知能 m121003 70

履修(関連)

主キー H主キー K

主キー K ∪ H

Page 22: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 22

外部キー• 外部キー

企業の総務関係データ– 社員(社員番号,社員名,給与,所属,・

・)

– 部門(部門番号,部門名,部門長,・・)

– 所属は部門に登録されているものか空値– 部門長は社員に登録されているものか空値

• 外部キー参照した先が主キーになっている

• 外部キー制約

Page 23: 第 10 回 データベース ( Database) (2007/12/11版)

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 部門(部門番号)

Page 24: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 24

第 1正規形• 第 1正規形 (the first normal form, 1NF)

– ドメインがシンプル– ある属性のドメインが

ドメインの直積ではないドメインのべき集合(値の集合)ではない

– 要するに、単純なドメインである厳密に定義することは難しい

– 入れ子型リレーションではないリレーションの属性値がリレーション

– 正規化:正規形にすること– 注:ベキ集合とは部分集合の集合

Page 25: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 25

第 1正規形• 第1正規形

– リレーションとはドメインの直積空間(集合)での部分集合

– 直積空間(集合)で個別に識別できること– ドメインがシンプルとは、そのドメインが

ドメインの直積ドメインのベキ集合ドメインの直積のベキ集合

– シンプルなドメイン上で定義されたリレーションは第1正規形( first normal form, 1NF)各要素(タプル)が個別に識別できる

になっていない

Page 26: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 26

第 1正規形• 第1正規形

– リピーティンググループ→ 第1正規形から排除レコードのフィールド値が値の集合(タプルの属性値)

• 非第1正規形 (non-first normal form)第1正規形でないリレーション入れ子型リレーション (nested relation) ともいう

Page 27: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 28: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 29: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 29

スキーマ• リレーショナルデータベーススキーマ

– リレーショナルスキーマインスタンスとしてのリレーションの時間的に不変な構造的枠組み

– リレーショナルデータベーススキーマ複数のリレーションの集まりインスタンスとしてのリレーショナルデータベースの時間的に不変な構造的枠組み

Page 30: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 30

スキーマ• リレーショナルデータベーススキーマ

– データベーススキーマ名– リレーションスキーマ(テーブル)定義 × n– ドメイン定義 × n– 一貫性制約定義– 特権定義誰が、どのリレーションを読み書きできるか

– ビュー定義、他仮想的なリレーション(物理的に格納されていないリレーション)

– 表明、トリガ定義

Page 31: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 31

スキーマ• SQLでは

– スキーマ定義言語 (schema definition language) SDL

– スキーマ操作言語 (schema manipulation language) SML

– として用意されている

– 当然ながら、データベース操作言語 (Database Manupulation Language) も用意されている

Page 32: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 32

スキーマ• 権限付与と剥奪

– リレーションレベルの権限GRANT INSERT,DELETE ON 社員 TO U008 操作の種類 テーブル名 ユーザREVOKE INSERT,DELETE ON 社員 TO U008

– データベーススキーマレベルの権限CREATE SCHEMA 新しいスキーマ AUTHORIZATION ユーザ

Page 33: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 34: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 34

データベース演算(操作)

• データモデルの3つの要素構造記述 一貫性制約の記述 データ操作言語

• データ操作言語(Data Manipulation Language) DML

• リレーショナルデータベース複数のリレーションの集まりリレーション:実体:実世界のデータ 関連:データ間の関連

Page 35: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 35

データベース演算(操作)

• データベースとの相互作用– 質問(query)、問合せ

リレーショナルデータベースに質問して答えをもらう

– 更新(update)タプルの削除タプルの追加タプルの属性値の修正

– 質問、問合せのほうが多く使用される– 問合せ機能の体系化

Page 36: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 36

データベース演算(操作)• データ操作言語による問い合わせ

• 給与が 50以上の社員の社員名と所属

社員社員番号 社員名 給与 所属 健保番号

650A川B夫 50K55 805961508B田A朗 40K41 81403231A川B男 60K41 802012034C野D子 30K55 81998

結果リレーション社員名 所属A川B夫 K55A川B男 K41

Page 37: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 37

データベース演算(操作)• 結果リレーションの再帰性問い合わせした結果がまたリレーションになっている

• 実リレーション、基本リレーションデータベースに格納されているリレーション

• ビュー(仮想的なリレーション)格納されていないが、使用する上でリレーションを定義できる、それがビュー

結果リレーション社員名 所属A川B夫 K55A川B男 K41

Page 38: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 39: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 39

データベース演算(操作)• データ操作言語

データベースの中のデータを操作するための言語データを操作するとは、データの問合わせや更新を行うこと、すなわち、必要なデータをデータベースから入出力すること 人

プログラムmain

()

データベース

データ操作

Page 40: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 40

データベース演算(操作)• リレーショナル代数

リレーショナルデータベースを操作するための方法(操作言語)リレーショナルデータ操作言語

• データ操作言語を代数とよぶ理由リレーショナルデータベースの場合、データ操作を集合論に基づく、代数的手法(すなわち数学的演算)で行うことができるので

Page 41: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 41

データベース演算(操作)• リレーショナル代数の枠組(演算の種類)• 4つの集合演算

– 和集合演算– 差集合演算– 共通集合演算– 直積集合演算

• 4つのリレーショナル代数の演算– 射影演算– 選択演算– 結合演算– 商演算

Page 42: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 42

データベース演算(操作)• 8つの演算は必ずしも独立ではない• 例:共通集合を差集合で表す

R∩S=R-(R-S)

R S

R∩SR-S S-R

Page 43: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 43

データベース演算(操作)• 結合演算は直積演算と選択演算• 商演算は直積演算、射影演算、差演算• リレーショナル代数は5つの演算(独

立)– 和集合演算– 差集合演算– 直積演算– 射影演算– 選択演算

Page 44: 第 10 回 データベース ( Database) (2007/12/11版)

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 )

Page 45: 第 10 回 データベース ( Database) (2007/12/11版)

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)

– リレーションはタプルを要素とする集合– 結果リレーションの属性名のつけかた

Page 46: 第 10 回 データベース ( Database) (2007/12/11版)

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に属していないタプル

Page 47: 第 10 回 データベース ( Database) (2007/12/11版)

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に属しているタプル

Page 48: 第 10 回 データベース ( Database) (2007/12/11版)

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)

Page 49: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 49

データベース演算(操作)• 直積集合演算 (direct product)

– 結果リレーションの属性名どちらから来たものか明確にしておく必要がある(R、Sの中に同じ属性名がありうるので)

– 修飾リレーションRから来た属性AならR.Aと表すリレーションSから来た属性AならS.Aと表す

– RとSが同じRならば、左右を明示するRをRL、SをRRと書く

Page 50: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 50

データベース演算(操作)• 直積集合演算 (direct product)

社員社員番号 社員名 給与 所属

650A川B夫 50K551508B田A朗 40K41231A川B男 60K412034C野D子 30K55

部門部門番号 部門名 部門長K55 データベース 650K41 人工知能 1508

Page 51: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 52: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 52

• 射影 (projection)縦方向に切り出す指定した属性のみをもってくる

• タプルの重複はないリレーションは集合であるから

• 例リレーション供給の属性集合{供給元、部品}上の射影

データベース演算(操作)

Page 53: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 54: 第 10 回 データベース ( Database) (2007/12/11版)

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

タプルの重複はないこのタプルは不要 集合だから

Page 55: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 56: 第 10 回 データベース ( Database) (2007/12/11版)

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 の中に存在する (∃) 元(ゲン、要素)のタプルを、指定する属性で、もってきているという意味、∃は存在作用素

Page 57: 第 10 回 データベース ( Database) (2007/12/11版)

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]

Page 58: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 58

データベース演算(操作)

• 選択 (selection)横方向に切り出す条件を満たすタプルのみをもってくる

• 制限 (restriction) ともいう

Page 59: 第 10 回 データベース ( Database) (2007/12/11版)

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値が θ の関係にあるとき真、そうでないとき偽 θ は具体的には>,≧,=,≦,<,≠読み方、大なり、以上、等号、以下、小なり、不等号

Page 60: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 60

データベース演算(操作)

• θ ー比較可能の例

商品商品番号 商品名 原価 売価 定価G110 刺身 600 500 980G120 豆腐 90 75 120G130 卵 95 100 140G140 コーヒー豆 700 860 860G150 ケーキ 200 250 300

θ ー比較可能θ ー比較可能ではない

Page 61: 第 10 回 データベース ( Database) (2007/12/11版)

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] とがθ の関係にあるタプルを選択すること

Page 62: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 63: 第 10 回 データベース ( Database) (2007/12/11版)

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}

Page 64: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 64

データベース演算(操作)

• θ ー選択演算(1つの属性と一定値)• 定値リレーションの導入直積演算、 θ ー選択、射影演算(1)定値リレーション CONST 属性C、値c(2)R[Ai θ c]=((R ×CONST)[R.Ai θ CONST.C])[A1,A2,・・・, An]

直積 θ ー選択

射影(属性Cを除去)

Page 65: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 65

データベース演算(操作)

• 結合 (join)タプルとタプルのつながりは、属性値を介して陰 (implicit) に表されている陰⇔陽 (explicit)

• CODASYL親子集合、ポインタ陽に表されている

Page 66: 第 10 回 データベース ( Database) (2007/12/11版)

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)θ が等号(=)のとき

Page 67: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 67

データベース演算(操作)

• 等結合の例(2つのリレーション社員、部門の結合)

社員社員番号 社員名 給与 所属

650A川B夫 50K551508B田A朗 40K41231A川B男 60K412034C野D子 30K55

部門部門番号 部門名 部門長K55 データベース 650K41 人工知能 1508

Page 68: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 68

データベース演算(操作)

• 等結合の例(2つのリレーション社員、部門の結合)

[社員 所属=部門番号]部門.社員 社員番

号 .社員 社員名.社員 給

与.社員 所

属.部門 部

門番号 .部門 部門名.部門 部門

長650A川B夫 50K55 K55 データベース 6501508B田A朗 40K41 K41 人工知能 1508231A川B男 60K41 K41 人工知能 15082034C野D子 30K55 K55 データベース 650

Page 69: 第 10 回 データベース ( Database) (2007/12/11版)

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を社員と表記

Page 70: 第 10 回 データベース ( Database) (2007/12/11版)

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]

直積 θ ー選択

Page 71: 第 10 回 データベース ( Database) (2007/12/11版)

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のこれらの属性の組の上の結合

Page 72: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 72

データベース演算(操作)

• 結合:属性の組の例

社員社員番号 社員名 年齢 給与 所属

650A川B夫 47 50K551508B田A朗 50 40K41231A川B男 45 60K412034C野D子 30 30K55

Page 73: 第 10 回 データベース ( Database) (2007/12/11版)

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を社員と表記

Page 74: 第 10 回 データベース ( Database) (2007/12/11版)

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}

Page 75: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 75

データベース演算(操作)

• 自然結合の例

社員社員番号 社員名 給与 部門番号

650A川B夫 50K551508B田A朗 40K41231A川B男 60K412034C野D子 30K55

部門部門番号 部門名 部門長K55 データベース 650K41 人工知能 1508

結合属性は部門番号

Page 76: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 76

データベース演算(操作)

• 自然結合の例

社員*部門社員番号 社員名 給与 部門番号 部門名 部門長

650A川B夫 50K55 データベース 6501508B田A朗 40K41 人工知能 1508231A川B男 60K41 人工知能 15082034C野D子 30K55 データベース 650

Page 77: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 77

データベース演算(操作)

• 自然結合 (natural join)

• インナー結合• アウター結合

Page 78: 第 10 回 データベース ( Database) (2007/12/11版)

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)を表す

Page 79: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 80: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 80

データベース演算(操作)

• 商の例 部品供給 R

供給元A1部品B1A11 P101A11 P102A12 P102A12 P103A13 P101A13 P102A13 P103

 必要部品 S部品B1P101P102

÷R S供給元A11A13

部品供給 ÷ 必要部品

Page 81: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 81

データベース演算(操作)

• 商の検算 ( ? ) 例 (R ÷ S) × S

 部品供給 R供給元A1部品B1A11 P101A11 P102A13 P101A13 P102

 必要部品 S部品B1P101P102

÷R S供給元A11A13

部品供給 ÷ 必要部品

Page 82: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 82

データベース演算(操作)

• 商の例 部品供給 R

供給元A1部品B1t1 u1t1 u2t2 u2t2 u3t3 u1t3 u2t3 u3

 必要部品 S部品B1u1u2

÷R S供給元t1t3

部品供給 ÷ 必要部品

Page 83: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 83

正規形• 第 1正規形各タプルの各属性値が– 集合ではない– ベクトルのような値の並び(複合値)ではない

• リレーショナルデータベースDB={R1,R2,・・・,Rn}(リレーション内、リレーション間で一貫性制約)

• R1 ,R2,・・・,Rnが第 1正規形であるこれで十分か?→十分ではない(更新時異状が噴出)→高次の正規化が必要

Page 84: 第 10 回 データベース ( Database) (2007/12/11版)

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

主キーは{顧客名,商品名}

Page 85: 第 10 回 データベース ( Database) (2007/12/11版)

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 ー

主キー(顧客名,商品名)の顧客名が空値

挿入できない

Page 86: 第 10 回 データベース ( Database) (2007/12/11版)

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 の情報が失われる

Page 87: 第 10 回 データベース ( Database) (2007/12/11版)

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箇所に及ぶ

Page 88: 第 10 回 データベース ( Database) (2007/12/11版)

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

餅つき機から洗濯機に変更すると,餅つき機の単価情報が失われる

Page 89: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 89

正規形

• 更新時異状の原因• 2つの異なる事象のデータが1つのリレー

ションに格納されているから

• 2つの事象– どの顧客がどの商品を何個注文したか– ある商品の単価

• それなら分解すればよいこれを one fact in one relation といったりする

Page 90: 第 10 回 データベース ( Database) (2007/12/11版)

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

リレーション 注文の属性集合{顧客名,商品名,数量,金額}上の射影

Page 91: 第 10 回 データベース ( Database) (2007/12/11版)

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

リレーション 注文の属性集合{商品名,単価}上の射影

Page 92: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 93: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 94: 第 10 回 データベース ( Database) (2007/12/11版)

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

意味のないタプル意味のないタプル

結合のわな

Page 95: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 95

正規形

• リレーションの情報無損失分解• 無損失ではない例注文を{顧客名,商品名}、{商品名,数量,単価,金額}上の射影として分解すると、自然結合の結果、意味のないタプルが出現するこの現象を結合のわなという

Page 96: 第 10 回 データベース ( Database) (2007/12/11版)

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に無い「結合のわ

な」

Page 97: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 98: 第 10 回 データベース ( Database) (2007/12/11版)

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

フライト番号が決まれば、複数のクルー名が決まる(多値従属)

フライト番号が決まれば、複数の乗客名が決まる(多値従属)

Page 99: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 100: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 100

正規形

• 関数従属性 関数(写像)関係

A1,A2,・・ ・・,Al

B1,B2,・・ ・・,Bm

注:ここでの「関数」は「写像」と同義

・・

・・

・・

・・

Page 101: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 101

正規形

• 関数従属性 関数的に決定する関数的に従属する決定子、被決定子

関数従属性A1A2・・・・ Al → B1B2・・・・ Bmが存在するとA・・・・は B・・・・を 関数的に決定するB・・・・は A・・・・に 関数的に従属するA・・・・を 決定子という、B・・・・を 被決定子という

Page 102: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 103: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 104: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 104

第 2正規形• 第2正規形でない例(候補キー(主キー)

の部分集合に関数従属しているスキーマ)

• 候補キーの部分集合に関数従属している(単価は商品名に関数従属している)

注文顧客名 商品名 数量 単価A商店 テレビ 3 198,000Bマート テレビ 10 198,000Bマート 洗濯機 5 59,800C社 餅つき機 1 29,800Dスーパー パン焼機 2 29,800

非第 2正規形

Page 105: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 106: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 106

第 3正規形

• 第3正規形(1)Rは第2正規形である(2)Rのすべての非キー属性はRのいか

なる候補キーにも推移的に従属しない

Page 107: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 107

第 3正規形

• 第3正規形ではない

社員社員番号 社員名 給与 所属 勤務地

650阿部昭博 50K55 神奈川1508斎藤美恵子 40K41 東京231神田茂 60K41 東京2034渡辺和代 40K55 神奈川2100鶴窪隆博 40K58 静岡

Page 108: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 108

第 3正規形

• 第3正規形ではないタプル挿入時異状

社員社員番号 社員名 給与 所属 勤務地

650阿部昭博 50K55 神奈川1508斎藤美恵子 40K41 東京231神田茂 60K41 東京2034渡辺和代 40K55 神奈川2100鶴窪隆博 40K58 静岡

K45 千葉

キー制約にふれる

Page 109: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 109

第 3正規形

• 第3正規形ではないタプル削除時異状

社員社員番号 社員名 給与 所属 勤務地

650阿部昭博 50K55 神奈川1508斎藤美恵子 40K41 東京231神田茂 60K41 東京2034渡辺和代 40K55 神奈川2100鶴窪隆博 40K58 静岡

K58、静岡が失われる

Page 110: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 110

第 3正規形

• 第3正規形ではないタプル修正時異状K41が東京から千葉に変更鶴窪の所属がK58からK55に変更

社員社員番号 社員名 給与 所属 勤務地

650阿部昭博 50K55 神奈川1508斎藤美恵子 40K41 東京231神田茂 60K41 東京2034渡辺和代 40K55 神奈川2100鶴窪隆博 40K58 静岡

K58、静岡が失われる

Page 111: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 111

第 3正規形

• 第3正規形ではない例

社員社員番号 社員名 給与 所属 勤務地

650阿部昭博 50K55 神奈川1508斎藤美恵子 40K41 東京231神田茂 60K41 東京2034渡辺和代 40K55 神奈川2100鶴窪隆博 40K58 静岡

社員番号→勤務地という関数従属性は社員番号→所属 ∧ 所属→勤務地 ⇒ 社員番号→勤務地

導出された推移的関数従属性

Page 112: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 112

第 3正規形

• 第3正規形に分解

[  社員 社員番号,社員名,給与,所属]社員番号 社員名 給与 所属

650阿部昭博 50K551508斎藤美恵子 40K41231神田茂 60K412034渡辺和代 40K552100鶴窪隆博 40K58

[  社員 所属,勤務地]所属 勤務地K55 神奈川K41 東京K41 東京K55 神奈川K58 静岡

Page 113: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 113

ボイスコッド正規形• ボイスコッド正規形(BCNF)• 3NFであるが,BCNFではない例

• 主キー {学生名,科目名}科目を担当する教官は複数その中から1人を選ぶ

• 教官は1科目のみ担当

SCT

学生名 科目名 教官名三枝義典 データベース 増永良文三枝義典 数式処理 佐々木顕正三浦郁子 データベース 穂高義介田母神裕子 認知科学 田畑隆一

student,course,teacher

Page 114: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 114

ボイスコッド正規形

• ボイスコッド正規形• 3NFであるが,BCNFではない例

SCT

学生名 科目名 教官名三枝義典 データベース 増永良文三枝義典 数式処理 佐々木顕正三浦郁子 データベース 穂高義介田母神裕子 認知科学 田畑隆一

Page 115: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 115

ボイスコッド正規形

• ボイスコッド正規形• 3NFであるが,BCNFではない例• タプル挿入時の異状

SCT

学生名 科目名 教官名三枝義典 データベース 増永良文三枝義典 数式処理 佐々木顕正三浦郁子 データベース 穂高義介田母神裕子 認知科学 田畑隆一

CG A氏

Page 116: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 116

ボイスコッド正規形

• ボイスコッド正規形• 3NFであるが,BCNFではない例• タプル削除時の異状

SCT

学生名 科目名 教官名三枝義典 データベース 増永良文三枝義典 数式処理 佐々木顕正三浦郁子 データベース 穂高義介田母神裕子 認知科学 田畑隆一

Page 117: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 117

ボイスコッド正規形

• ボイスコッド正規形• 3NFであるが,BCNFではない例• タプル修正時の異状

SCT

学生名 科目名 教官名三枝義典 データベース 増永良文三枝義典 数式処理 佐々木顕正三浦郁子 データベース 穂高義介田母神裕子 認知科学 田畑隆一

認知科学履修科目の変更

Page 118: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 118

ボイスコッド正規形

• ボイスコッド正規形への分解

SCT

学生名 科目名 教官名三枝義典 データベース 増永良文三枝義典 数式処理 佐々木顕正三浦郁子 データベース 穂高義介田母神裕子 認知科学 田畑隆一

SCT[学生名,教官名]学生名 教官名三枝義典 増永良文三枝義典 佐々木顕正三浦郁子 穂高義介田母神裕子 田畑隆一

SCT[教官名,科目名]教官名 科目名増永良文 データベース佐々木顕正 数式処理穂高義介 データベース田畑隆一 認知科学

Page 119: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 119

第 4正規形

• 第4正規形 • 関数従属性を用いた正規形第2,第3正規形

• 決定子を候補キーに限定した正規形ボイスコッド正規形

• 多値従属性に着目した正規形第4正規形

Page 120: 第 10 回 データベース ( Database) (2007/12/11版)

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'

直交

Page 121: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 121

第 4正規形

• 第4正規形に正規化

クルーフライト番号 クルー名

55 P55 S505 P'505 S'

乗客フライト番号 乗客名

55 A55 B55 C505 A'

Page 122: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 122

データベース言語SQL基本機能

• リレーショナル代数集合論

• リレーショナル論理述語論理

• リレーショナル完備• よりユーザーフレンドリーなインターフェ

ース• そこでSQL

Structured Query LanguageそのルーツはIBM社SEQUELStructured English Query Language

Page 123: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 123

データベース言語SQL基本機能

• リレーショナル代数やリレーショナル論理に不足している機能

• 合計,平均,最大,といった自然な質問集約関数の導入

• プログラミング言語との連携• データベース言語

データ操作言語,定義機能を含む• SQLはISOの国際規格 JISの国内規格

Page 124: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 124

データベース言語SQL基本機能

• リレーショナルデータベース言語の標準化IBM サンノゼ研究所 SEQUELカリフォルニア大学 INGRES QUELIBM ワトソン研究所QBE

• データベース言語がバラバラである弊害– 使用方法の習熟– ソフトウェアの書き換え– 分散型データベースへの対応– 選択

Page 125: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 126: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 126

データベース言語SQL基本機能

• SQLによる質問(問合せ)• リレーショナルデータモデル

属性,タプル,リレーション• SQL列 (column) ,行 (row) ,表 (table)

• 実表,ビュー表,導出表(問合せ結果)• SQLの表では,重複したタプルの存在

も可マルチ集合

Page 127: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 127

データベース言語SQL基本機能

• SQLによる質問(問合せ)具体的な質問をすること「問合せを指定する」問合せ指定

• 問合せ指定の基本形SELECT 選択リストFROM 表参照リストWHERE 探索条件

これは大事まずSELECT 、 FRO

M 、 WHEREと丸暗記しよう

Page 128: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 128

データベース言語SQL基本機能

• SELECT 値式リストリレーション代数の「射影」に相当リレーション代数の「選択」には相当しないリレーション代数の「選択」はWHERE 探索条件が相当する

• 選択リスト値式(ちしき)(あたいしき)列名(属性名)を指定ただし簡単な計算を指定することもできる例 「給与」,「給与*2」複数指定可能

Page 129: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 129

データベース言語SQL基本機能

• FROM 表参照リスト実表の名前ビュー表の名前複数指定可能

• WHERE 探索条件m変数の述語,命題関数

• 導出表結果リレーション

Page 130: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 130

データベース言語SQL基本機能• 例

• SELECT 社員名FROM 社員WHERE 所属=’K55’

• 導出表(結果)

社員社員番号 社員名 給与 所属 勤務地

650阿部昭博 50K55 神奈川1508斎藤美恵子 40K41 東京231神田茂 60K41 東京2034渡辺和代 40K55 神奈川2100鶴窪隆博 40K58 静岡

社員名阿部昭博渡辺和代

Page 131: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 131

データベース言語SQL基本機能

• 表(SQL)とリレーション(理論)の違い• データ型(ドメインに対応)

– 文字列型– 概数型– 真数型

• 集約関数のサポートCOUNT、SUM、AVG、MAX、MIN

• DISTINCT,GROUP-BY,HAVING,ORDER-BY

• BETWEEN,IN,LIKE,NULL,EXISTS

• 親言語への組み込み

Page 132: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 133: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 133

データベース言語SQL基本機能

• (a)全商品の全属性SELECT * --*はすべてFROM 商品

導出表商品商品番号 商品名 定価G1 テレビ 198000G2 洗濯機 59800G3 テレビ 98000

Page 134: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 134

データベース言語SQL基本機能

• (b)納品した商品の商品番号SELECT 商品番号 FROM 納品

導出表

• どの商品が延べ何回取引されたかわかる

納品商品番号G1G1G2G2G3

重複がある

重複がある

Page 135: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 135

データベース言語SQL基本機能

• (c)納品した商品の商品番号,重複なしSELECT DISTINCT 商品番号 FROM 納品

導出表納品商品番号G1G2G3

重複がない

Page 136: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 136

データベース言語SQL基本機能

• (d)商品番号,定価,2割引の値段SELECT 商品番号,定価,定価*0.8FROM 商品

• 導出表

• 列の名前はつかない

商品商品番号 商品名 定価G1 テレビ 198000 158400G2 洗濯機 59800 47840G3 テレビ 98000 78400

Page 137: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 137

データベース言語SQL基本機能

• (e)定価が 10万以上の商品の全列の値SELECT *FROM 商品WHERE 定価≧ 100000

• 導出表商品商品番号 商品名 定価G1 テレビ 198000

Page 138: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 138

データベース言語SQL基本機能

• (e)定価が6万以上、20万以下の商品の全列の値SELECT *FROM 商品WHERE 定価 BETWEEN 60000 AND 200000

• 導出表商品商品番号 商品名 定価G1 テレビ 198000G3 テレビ 98000

Page 139: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 139

データベース言語SQL基本機能

• (e)定価が6万以上、20万以下の商品で、商品名がテレビの全列の値SELECT *FROM 商品WHERE 定価 BETWEEN 60000 AND 200000AND 商品名=N’テレビ’

• 導出表商品商品番号 商品名 定価G1 テレビ 198000G3 テレビ 98000

Page 140: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 140

データベース言語SQL基本機能

• (f)商品を定価の安いから高い順SELECT *FROM 商品ORDER BY 定価 ASC --ASCは省略可( ascent )

• 導出表 商品商品番号 商品名 定価G2 洗濯機 59800G3 テレビ 98000G1 テレビ 198000

Page 141: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 141

データベース言語SQL基本機能

• (f)商品を定価の高いから安い順SELECT *FROM 商品ORDER BY 定価 DESC --DESCはこの順でならべたいとき省略不可( descent )

• 導出表商品商品番号 商品名 定価G1 テレビ 198000G3 テレビ 98000G2 洗濯機 59800

Page 142: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 142

データベース言語SQL基本機能

• (g)納品した商品の総数を商品番号ごとにSELECT 商品番号,SUM(納品数量)FROM 納品GROUP BY 商品番号

• 導出表商品商品番号G1 13G2 15G3 2

Page 143: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 143

データベース言語SQL基本機能

• (g)納品した商品の総数を商品番号ごとに、納品数量が10以上SELECT 商品番号,SUM(納品数量)FROM 納品GROUP BY 商品番号HAVING SUM(納品数量) ≧ 10

• 導出表商品商品番号G1 13G2 15

Page 144: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 144

データベース言語SQL高度な問合せ指定機能

• 結合質問 (join query)リレーショナル代数の結合 (join) に相当表参照リストに2つ以上指定

• 例「商品の商品番号と納品した商品の商品番号が等しい商品情報(商品の全属性値)と納品情報のすべての組を求めよ」(商品表と納品表の等結合 (equi-join) を属性,商品番号上でとる)

Page 145: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 145

データベース言語SQL高度な問合せ指定機能

• 結合質問 (join query)

• 等結合( equi-join) の例SELECT 商品.*,納品.*FROM 商品,納品WHERE 商品.商品番号=納品.商品番号

Page 146: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 147: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 147

データベース言語SQL高度な問合せ指定機能

• 等結合 商品.商品番号 =納品.商品番号商品商品番号 商品名 定価G1 テレビ 198000G2 洗濯機 59800G3 テレビ 98000

納品商品番号 顧客番号 納品数量G1 C1 3G1 C2 10G2 C2 5G2 C3 10G3 C3 2

Page 148: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 149: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 149

データベース言語SQL高度な問合せ指定機能

• 自然結合 (natural join) の例 例:「商品データとそれを納入した顧客番号と納品数量を全て求めよ」SELECT 商品.*,顧客番号,納品数量FROM 商品,納品WHERE 商品.商品番号 =納品.商品番号

商品商品番号 商品名 定価G1 テレビ 198000G1 テレビ 198000G2 洗濯機 59800G2 洗濯機 59800G3 テレビ 98000

顧客番号 納品数量C1 3C2 10C2 5C3 10C3 2

Page 150: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 150

データベース言語SQL高度な問合せ指定機能

• 3つの表の自然結合 例:「納品状況を示す全ての商品名と顧客名と納品数量の組を求めよ」SELECT 商品名,顧客名,納品数量FROM 商品,納品,顧客WHERE 商品.商品番号 =納品.商品番号AND 納品.顧客番号 =顧客.顧客番号

商品名テレビテレビ洗濯機洗濯機テレビ

納品数量3105102

顧客名A商店BマートBマートC社C社

Page 151: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 152: 第 10 回 データベース ( Database) (2007/12/11版)

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

Page 153: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 153

データベース言語SQL高度な問合せ指定機能

• 自己結合 (self-join) 同じ表を使用するSELECT X.社員番号,Y.社員番号FROM 社員 X,社員 YWHERE X.部長=Y.社員番号AND X.給与>Y.給与

• 相関名またはタプル変数 X,Y

社員社員番号

231

社員社員番号

1508

Page 154: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 154

データベース言語SQL高度な問合せ指定機能

• 入れ子型質問 内側の問合せ副問合せ外側の問合せは主問合せ

• 例SELECT 顧客番号,顧客名FROM 顧客WHERE 顧客番号 IN (SELECT 顧客番号 FROM 納品 WHERE 商品番号=’G1’)

副問合せ主問合せ

Page 155: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 155

データベース言語SQL高度な問合せ指定機能

• SQLのリレーショナル完備性すくなくともリレーショナル代数(リレーショナル論理)と同等な質問機能をもっているとき、リレーショナル完備という和差直積射影選択

Page 156: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 156

データベース言語SQL高度な問合せ指定機能

• 和 R∪SSELECT *FROM RUNION SELECT *FROM S

ただし,RとSは和両立

Page 157: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 157

データベース言語SQL高度な問合せ指定機能

• 差 R-SSELECT *FROM RWHERE NOT EXISTS (SELECT * FROM S)

ただし,RとSは和両立

Page 158: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 158

データベース言語SQL高度な問合せ指定機能

• 直積 R ×SSELECT R.*, S.* FROM R,S

Page 159: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 159

データベース言語SQL高度な問合せ指定機能

• 射影 R[Ai1,Ai2,・・ ・・,Aik]SELECT Ai1,Ai2,・・ ・・, AikFROM R

Page 160: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 160

データベース言語SQL高度な問合せ指定機能

• 選択 R[Ai θ Aj]SELECT *FROM RWHERE Ai θ Aj

Page 161: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 161

データベース言語SQL高度な問合せ指定機能

• 更新操作– 新しい行の挿入– 不要となった行の削除– 行の書き換え

Page 162: 第 10 回 データベース ( Database) (2007/12/11版)

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’)

Page 163: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 163

データベース言語SQL高度な問合せ指定機能

• 削除DELETEFROM RWHERE 探索条件

Page 164: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 164

データベース言語SQL高度な問合せ指定機能

• 書き換えUPDATE RSET A1’=式1 A2’=式2 ・・ ・・ Ap’=式pWHERE 探索条件

Page 165: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 165

データベース言語SQL高度な問合せ指定機能

• 埋め込み型SQLプログラムからSQLを使用するSQLでは、PL /Ⅰ 、C、COBOL、FORTRAN、ADA、MUMPS、PASCALがホスト言語(親言語)として規定されているEXEC SQLで始まり、 ; で終わる SQL文 ;プリプロセッサが処理する

Page 166: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 166

データベース言語SQL高度な問合せ指定機能

• 埋め込み型SQL• データの渡し方次のBEGINからENDで挟み込んだところで、SQLと親言語両方で使用される変数を定義する埋め込みSQLで使用するとき : をつけるEXEC SQL BEGIN DECLARE SECTION;

EXEC SQL END DECLARE SECTION;

Page 167: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 167

データベース言語SQL高度な問合せ指定機能

• 埋め込み型SQL

• データの渡し方

INTO(SELECTした属性の値を、プログラムの中の変数に入れ込む)

• カーソルの使い方• エラーの受け渡しSQLSTATE、SQLCODE

Page 168: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 168

データベース言語SQL高度な問合せ指定機能

• 埋め込み型SQL• カーソルの使い方カーソルを定義(DECLARE CURSOR FOR この次にSQL文)カーソルを開く(OPEN)1行をとりだす(FETCH)(複数の行はダメ、複数の属性はOK)現在行の属性値を変数に入れる(INTO)カーソルを閉じる(CLOSE)

Page 169: 第 10 回 データベース ( Database) (2007/12/11版)

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;

Page 170: 第 10 回 データベース ( Database) (2007/12/11版)

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);

}

Page 171: 第 10 回 データベース ( Database) (2007/12/11版)

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);

?>

Page 172: 第 10 回 データベース ( Database) (2007/12/11版)

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言語)

Page 173: 第 10 回 データベース ( Database) (2007/12/11版)

2007/12/13 情報システム構築 第10回 173

•データベース

•次回•プロジェクト管理

•データベース

•次回•プロジェクト管理

まとめと次回まとめと次回