情報システム構築 第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
© Copyright 2025 ExpyDoc