第10回 データベース (Database) (2007/12/11版) 「情報システム構築」 第10回 2007/12/13 情報システム構築 第10回 データベース (Database) (2007/12/11版) 参考書19: 増永良文、「リレーショナルデータベース入門(新訂版)」、サイエンス社 2007年12月13日 2007/12/13 情報システム構築 第10回
データベースとは データの重要性 例:企業はデータに基づき、企業活動を行っている(セブンイレブンの躍進) データベースの重要性 必要なデータが迅速に取り出せる そのための仕組みが必要 データの独立(データ処理することと切り離す) どういうデータがどういう形でほしいといったことと分離させておく データのベース(基地) Data Base → Database 2007/12/13 情報システム構築 第10回
データベースの重要性 ファイルシステムからデータベース プログラムから分離 データのほうが長持ちする(データの内容ではなく、枠組み)→スキーム データ(ベース)の一貫性(integrity) (consistency) データベースの機密保護(security) セキュリティ 2007/12/13 情報システム構築 第10回
データベースの種類 リレーショナル(関係)データベース 最近では最も普及 最も数学的(形式的) 集合論が基礎となっている コッド博士 1970年 ネットワーク型データベース 縦横にポインタ(チェイン、リンク)がはられている 階層型データベース ツリー状にポインタ(チェイン、リンク)がはられている オブジェクト指向データベース 最近のオブジェクト指向の考えを取り入れたデータベース 形は階層型データベースに類似する 2007/12/13 情報システム構築 第10回
モデリング データベースとDBMS DBMS(Database Management System): データを操作する(扱う)ためのソフトウェア 例:Oracle、SQL Server、Access、PostgreSQL、MySQL データベース:中身、内容 例:企業データ、売上データ、成績データ データと情報 データ:数値や文字列 情報:データに意味付けしたもの 往々にして、混同して使われる 2007/12/13 情報システム構築 第10回
モデリング データモデル 実世界をデータの世界で表現するもの 実世界を記述する記号体系 実世界 データモデルの世界 社員 社員データ 名前、生年月日、本給、 作業時間、・・ ・・ プロジェクトデータ 予定表データ 2007/12/13 情報システム構築 第10回
データモデリングの進め方 データモデル 概念モデル→論理モデル (Conceptual model) (Logical model) ANSI/X3/SPARC 3層スキーマ 概念モデル 外部スキーマ 論理モデル 概念スキーマ 相当 内部スキーマ 2007/12/13 情報システム構築 第10回
学生(型) 総体として捉える 全般に学生とは どういう属性をもっている データモデリングの進め方 概念モデルの表現方法 E-Rモデル(E-R図、実体ー関連モデル) Entity-Relationship model 実体(entity) 実体型(entity type) 学生1 学生2 学生3 学生n 例 ・・ ・ 学生(型) 総体として捉える 全般に学生とは どういう属性をもっている オブジェクト指向のクラスにあたる 2007/12/13 情報システム構築 第10回
履修(型) 総体として捉える 全般に学生と科目の間には どういう属性をもっている データモデリングの進め方 概念モデルの表現方法 E-Rモデル(E-R図、実体ー関連モデル) Entity-Relationship model 関連(relation) 関連型(relation type) 学生1、科目1 学生1、科目2 学生2、科目1 学生n、科目m 例 ・・ ・ 履修(型) 総体として捉える 全般に学生と科目の間には どういう属性をもっている オブジェクト指向のクラスにあたる 2007/12/13 情報システム構築 第10回
ER図 概念モデルの表現方法 E-Rモデル(E-R図、実体ー関連モデル) Entity-Relationship model 実体の表現 長方形で表現 実体型の名称 学生 実体型の属性 学籍番号 氏名 住所 または属性は楕円で 付属させる 2007/12/13 情報システム構築 第10回
ER図 概念モデルの表現方法 E-Rモデル(E-R図、実体ー関連モデル) Entity-Relationship model 関連の表現 菱形で表現 関連型の名称 履修 関連型の属性 得点 2007/12/13 情報システム構築 第10回
ER図 EーRモデルの図 実体と関連を同一の図に表現する 基数を書く(関連中心) 関連を中心にして、結合される実体数を表記する 科目数Nに対して学生数M(N,Mは具体的数値でなくてもよい、実際には増減する。) 科目 学生 N 履修 M 科目名 単位数 学籍番号 氏名 住所 得点 2007/12/13 情報システム構築 第10回
ER図 EーRモデルの図 実体と関連を同一の図に表現する 基数を書く(実体中心) 実体を中心にして、関連付け先の実体の数の最小、最大を表記する 最小結合度、最大結合度による表現(結合度:結合の数) 1,N 学科 学生 所属 学科名 教育目標 学籍番号 氏名 住所 年度 1,1 2007/12/13 情報システム構築 第10回
データモデルの表現方法 論理モデルの表現方法 リレーショナルデータモデル ネットワークデータモデル ハイアラキカルデータモデル ここでは、リレーショナルデータモデル (実際、一番普及している) 表(テーブル)で表現する 2007/12/13 情報システム構築 第10回
ERからリレーションへ 実体ー関連図をリレーショナルスキーマに変換する例 学籍番号 学生 学生名 住所 外部キー 履修 得点 科目名 科目 単位数 履修 得点 外部キー 2007/12/13 情報システム構築 第10回
リレーショナルデータベース 表による表現 実体も関連も表で表現 実体型の名称 科目(実体) 学生(実体) 実体型の属性 実体型の属性 履修(関連) 2007/12/13 情報システム構築 第10回
主キー 主キー 候補キー 属性の値(属性の値の組)がリレーションのタプルを一意的に特定(同定)できる属性(の組) 「主キー」となりえる候補という意味 極小である 属性の組が候補キーになっているとき、その属性のうち1つでも欠落したら、一意的特定ができなくなる 最悪 全属性の組み合わせが候補キーとなる (タプルの重複はないものとする:集合論) 2007/12/13 情報システム構築 第10回
主キー 候補キー 社員名がA川B夫であるタプル 2007/12/13 情報システム構築 第10回
主キー 主キー 候補キーから1つ選ぶ データベース設計者がどの候補キー(属性)を第1に捉えるかによる キー制約 つねに主キーを構成する属性の値は空値とならない 唯一識別能力(候補キーなので、当然) 「つねに」:いかなる(時刻、インスタンス)でも アンダーライン 主キーを構成する属性にはアンダーラインを引く、 納品(商品番号,顧客番号,納品数量) 2007/12/13 情報システム構築 第10回
前提:1つの科目を 複数の教員で 担当することはない 主キー 1対多 主キーはH 主キー K 主キー H 教員(実体) 科目(実体) 主キー H 担当(関連) 前提:1つの科目を 複数の教員で 担当することはない 2007/12/13 情報システム構築 第10回
主キー 多対多 主キーは和集合K∪H 主キー K 主キー H 科目(実体) 学生(実体) 主キー K ∪ H 履修(関連) 多対多 主キーは和集合K∪H 主キー K 主キー H 科目(実体) 学生(実体) 主キー K ∪ H 履修(関連) 2007/12/13 情報システム構築 第10回
外部キー 外部キー 企業の総務関係データ 外部キー 参照した先が主キーになっている 外部キー制約 社員(社員番号,社員名,給与,所属,・・) 部門(部門番号,部門名,部門長,・・) 所属は部門に登録されているものか空値 部門長は社員に登録されているものか空値 外部キー 参照した先が主キーになっている 外部キー制約 2007/12/13 情報システム構築 第10回
外部キー 外部キー PRIMARY KEY (社員番号), FOREIGN KEY(所属) REFERENCE 部門(部門番号) 2007/12/13 情報システム構築 第10回
第1正規形 第1正規形(the first normal form, 1NF) ドメインがシンプル ある属性のドメインが ドメインの直積ではない ドメインのべき集合(値の集合)ではない 要するに、単純なドメインである 厳密に定義することは難しい 入れ子型リレーションではない リレーションの属性値がリレーション 正規化:正規形にすること 注:ベキ集合とは部分集合の集合 2007/12/13 情報システム構築 第10回
第1正規形 第1正規形 リレーションとはドメインの直積空間(集合)での部分集合 直積空間(集合)で個別に識別できること ドメインがシンプルとは、そのドメインが ドメインの直積 ドメインのベキ集合 ドメインの直積のベキ集合 シンプルなドメイン上で定義されたリレーションは第1正規形(first normal form, 1NF) 各要素(タプル)が個別に識別できる になっていない 2007/12/13 情報システム構築 第10回
第1正規形 第1正規形 リピーティンググループ→ 第1正規形から排除 レコードのフィールド値が値の集合 (タプルの属性値) 非第1正規形(non-first normal form) 第1正規形でないリレーション 入れ子型リレーション(nested relation)ともいう 2007/12/13 情報システム構築 第10回
第1正規形 非(第1)正規形の例(属性が直積) 上記の正規化 2007/12/13 情報システム構築 第10回
第1正規形 非(第1)正規形の例(属性が集合) 上記の正規化(集合を分ける) 2007/12/13 情報システム構築 第10回
スキーマ リレーショナルデータベーススキーマ リレーショナルスキーマ インスタンスとしてのリレーションの 時間的に不変な構造的枠組み リレーショナルデータベーススキーマ 複数のリレーションの集まり インスタンスとしてのリレーショナルデータベースの 時間的に不変な構造的枠組み 2007/12/13 情報システム構築 第10回
スキーマ リレーショナルデータベーススキーマ データベーススキーマ名 リレーションスキーマ(テーブル)定義×n ドメイン定義×n 一貫性制約定義 特権定義 誰が、どのリレーションを読み書きできるか ビュー定義、他 仮想的なリレーション(物理的に格納されていないリレーション) 表明、トリガ定義 2007/12/13 情報システム構築 第10回
スキーマ SQLでは スキーマ定義言語(schema definition language) SDL スキーマ操作言語(schema manipulation language) SML として用意されている 当然ながら、データベース操作言語(Database Manupulation Language)も用意されている 2007/12/13 情報システム構築 第10回
スキーマ 権限付与と剥奪 リレーションレベルの権限 GRANT INSERT,DELETE ON 社員 TO U008 操作の種類 テーブル名 ユーザ REVOKE INSERT,DELETE ON 社員 TO U008 データベーススキーマレベルの権限 CREATE SCHEMA 新しいスキーマ AUTHORIZATION ユーザ 2007/12/13 情報システム構築 第10回
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回
データモデルの3つの要素 構造記述 一貫性制約の記述 データ操作言語 データベース演算(操作) データモデルの3つの要素 構造記述 一貫性制約の記述 データ操作言語 データ操作言語 (Data Manipulation Language) DML リレーショナルデータベース 複数のリレーションの集まり リレーション:実体:実世界のデータ 関連:データ間の関連 2007/12/13 情報システム構築 第10回
データベース演算(操作) データベースとの相互作用 質問(query)、問合せ リレーショナルデータベースに質問して答えをもらう 更新(update) タプルの削除 タプルの追加 タプルの属性値の修正 質問、問合せのほうが多く使用される 問合せ機能の体系化 2007/12/13 情報システム構築 第10回
データベース演算(操作) データ操作言語による問い合わせ 給与が50以上の社員の社員名と所属 2007/12/13 情報システム構築 第10回
データベース演算(操作) 結果リレーションの再帰性 問い合わせした結果がまたリレーションになっている 実リレーション、基本リレーション データベースに格納されているリレーション ビュー(仮想的なリレーション) 格納されていないが、使用する上でリレーションを定義できる、それがビュー 2007/12/13 情報システム構築 第10回
データベース演算(操作) 給与が50以上 (選択) 属性の社員名と所属のみ切り出す(射影) 2007/12/13 情報システム構築 第10回
データベース演算(操作) データ操作言語 データベースの中のデータを操作するための言語 データを操作するとは、データの問合わせや更新を行うこと、すなわち、必要なデータをデータベースから入出力すること 人 データベース データ操作 プログラム main() 2007/12/13 情報システム構築 第10回
リレーショナル代数 リレーショナルデータベースを操作するための方法(操作言語) リレーショナルデータ操作言語 データベース演算(操作) リレーショナル代数 リレーショナルデータベースを操作するための方法(操作言語) リレーショナルデータ操作言語 データ操作言語を代数とよぶ理由 リレーショナルデータベースの場合、 データ操作を集合論に基づく、代数的手法(すなわち数学的演算)で行うことができるので 2007/12/13 情報システム構築 第10回
データベース演算(操作) リレーショナル代数の枠組(演算の種類) 4つの集合演算 4つのリレーショナル代数の演算 和集合演算 差集合演算 共通集合演算 直積集合演算 4つのリレーショナル代数の演算 射影演算 選択演算 結合演算 商演算 2007/12/13 情報システム構築 第10回
データベース演算(操作) 8つの演算は必ずしも独立ではない 例:共通集合を差集合で表す R S S-R R-S R∩S R∩S=R-(R-S) 2007/12/13 情報システム構築 第10回
データベース演算(操作) 結合演算は直積演算と選択演算 商演算は直積演算、射影演算、差演算 リレーショナル代数は5つの演算(独立) 和集合演算 差集合演算 直積演算 射影演算 選択演算 2007/12/13 情報システム構築 第10回
和両立(union compatible) データベース演算(操作) 和両立(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回
データベース演算(操作) 和集合演算(union) リレーションR リレーションS RとSは和両立 RとSの和(和集合)とは R∪S={t|t∈R ∨t∈S} ∨は論理和をあらわす論理記号 t∈R ∨t∈Sはtを変数とする命題、 すなわち述語(predicate) リレーションはタプルを要素とする集合 結果リレーションの属性名のつけかた 2007/12/13 情報システム構築 第10回
データベース演算(操作) 差集合演算(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回
共通集合演算(intersection) データベース演算(操作) 共通集合演算(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回
直積集合演算(direct product) データベース演算(操作) 直積集合演算(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回
直積集合演算(direct product) データベース演算(操作) 直積集合演算(direct product) 結果リレーションの属性名 どちらから来たものか明確にしておく必要がある(R、Sの中に同じ属性名がありうるので) 修飾 リレーションRから来た属性Aなら R.Aと表す リレーションSから来た属性Aなら S.Aと表す RとSが同じRならば、左右を明示する RをRL、SをRRと書く 2007/12/13 情報システム構築 第10回
直積集合演算(direct product) データベース演算(操作) 直積集合演算(direct product) 2007/12/13 情報システム構築 第10回
直積集合演算(direct product) データベース演算(操作) 直積集合演算(direct product) 2007/12/13 情報システム構築 第10回
射影(projection) 縦方向に切り出す 指定した属性のみをもってくる データベース演算(操作) 射影(projection) 縦方向に切り出す 指定した属性のみをもってくる タプルの重複はない リレーションは集合であるから 例 リレーション供給の属性集合{供給元、部品}上の射影 2007/12/13 情報システム構築 第10回
例:リレーション供給の 属性集合{供給元、部品}上の射影 データベース演算(操作) 例:リレーション供給の 属性集合{供給元、部品}上の射影 2007/12/13 情報システム構築 第10回
例:リレーション供給の 属性集合{供給元、部品}上の射影 データベース演算(操作) 例:リレーション供給の 属性集合{供給元、部品}上の射影 タプルの重複はない このタプルは不要 集合だから 2007/12/13 情報システム構築 第10回
射影(projection) フォーマルな定義 データベース演算(操作) 射影(projection) フォーマルな定義 リレーションR(A1,A2,・・・,An) Rの全属性集合{A1,A2,・・・,An}の 部分集合を X とする X={Ai1,Ai2,・・・,Aik} 1≦i1<i2<・・・<ik≦n Rの全属性集合 A1 A2 A3 An Rの属性の部分集合X Ai1 Ai2 Ain 2007/12/13 情報システム構築 第10回
射影(projection) フォーマルな定義 データベース演算(操作) 射影(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回
データベース演算(操作) 属性名 元の属性名を使用する タプル 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回
選択(selection) 横方向に切り出す 条件を満たすタプルのみをもってくる データベース演算(操作) 選択(selection) 横方向に切り出す 条件を満たすタプルのみをもってくる 制限(restriction)ともいう 2007/12/13 情報システム構築 第10回
θー比較可能(θ- comparable) 2つの属性がθー比較可能とは データベース演算(操作) θー比較可能(θ- 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回
データベース演算(操作) θー比較可能の例 θー比較可能ではない θー比較可能 2007/12/13 情報システム構築 第10回
データベース演算(操作) θー選択(θ- 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回
データベース演算(操作) θー選択の例 θー選択、> ー選択 2007/12/13 情報システム構築 第10回
2つの属性 Ai と Aj 上のθー選択 → 1つの属性でのθー選択 データベース演算(操作) θー選択演算(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回
データベース演算(操作) θー選択演算(1つの属性と一定値) 定値リレーションの導入 直積演算、θー選択、射影演算 (1)定値リレーション CONST 属性C、値c (2) R[Ai θ c] =((R×CONST)[R.Ai θ CONST.C])[A1,A2,・・・,An] 直積 θー選択 射影(属性Cを除去) 2007/12/13 情報システム構築 第10回
結合(join) タプルとタプルのつながりは、属性値を介して陰(implicit)に表されている 陰⇔陽(explicit) データベース演算(操作) 結合(join) タプルとタプルのつながりは、属性値を介して陰(implicit)に表されている 陰⇔陽(explicit) CODASYL 親子集合、ポインタ 陽に表されている 2007/12/13 情報システム構築 第10回
結合(join) θー結合(θーjoin) データベース演算(操作) 結合(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回
等結合の例 (2つのリレーション社員、部門の結合) データベース演算(操作) 等結合の例 (2つのリレーション社員、部門の結合) 2007/12/13 情報システム構築 第10回
等結合の例 (2つのリレーション社員、部門の結合) データベース演算(操作) 等結合の例 (2つのリレーション社員、部門の結合) 2007/12/13 情報システム構築 第10回
>ー結合(greater than join)の例 (同じリレーションどうしの結合の場合) データベース演算(操作) >ー結合(greater than join)の例 (同じリレーションどうしの結合の場合) 社員Lを社員と表記 社員Rを社員と表記 2007/12/13 情報システム構築 第10回
θー結合は直積演算とθー選択演算で定義することができる データベース演算(操作) θー結合は直積演算とθー選択演算で定義することができる リレーション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回
θー結合演算の概念を k個の属性の組み合わせに拡張 データベース演算(操作) θー結合演算の概念を 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回
データベース演算(操作) 結合:属性の組の例 2007/12/13 情報システム構築 第10回
データベース演算(操作) 結合:属性の組の例 社員Lを社員と表記 社員Rを社員と表記 2007/12/13 情報システム構築 第10回
データベース演算(操作) 自然結合(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回
データベース演算(操作) 自然結合の例 結合属性は部門番号 2007/12/13 情報システム構築 第10回
データベース演算(操作) 自然結合の例 2007/12/13 情報システム構築 第10回
データベース演算(操作) 自然結合(natural join) インナー結合 アウター結合 2007/12/13 情報システム構築 第10回
データベース演算(操作) 商(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回
データベース演算(操作) 商(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)を表す Rのタプルをtとuにわけ、Sの各タプルのすべてのuに対応しているtの集合 t u 2007/12/13 情報システム構築 第10回
データベース演算(操作) 商の例 部品供給÷必要部品 2007/12/13 情報システム構築 第10回
データベース演算(操作) 商の検算(?)例 (R÷S)×S 部品供給÷必要部品 2007/12/13 情報システム構築 第10回
データベース演算(操作) 商の例 部品供給÷必要部品 2007/12/13 情報システム構築 第10回
リレーショナルデータベース DB={R1,R2,・・・,Rn} (リレーション内、リレーション間で一貫性制約) 正規形 第1正規形 各タプルの各属性値が 集合ではない ベクトルのような値の並び(複合値)ではない リレーショナルデータベース DB={R1,R2,・・・,Rn} (リレーション内、リレーション間で一貫性制約) R1 ,R2,・・・,Rnが第1正規形である これで十分か? →十分ではない(更新時異状が噴出) →高次の正規化が必要 2007/12/13 情報システム構築 第10回
正規形 第1正規形で十分ではない例 主キーは{顧客名,商品名} 2007/12/13 情報システム構築 第10回
主キー(顧客名,商品名)の顧客名が空値 挿入できない 正規形 第1正規形で十分ではない例 タプル挿入時異状 主キー(顧客名,商品名)の顧客名が空値 挿入できない 2007/12/13 情報システム構築 第10回
第1正規形で十分ではない例 タプル削除時異状 餅つき機,単価29,800の情報が失われる 2007/12/13 情報システム構築 第10回
テレビの単価が148000に変更になったとき 修正が2箇所に及ぶ 正規形 第1正規形で十分ではない例 タプル修正時異状(1) テレビの単価が148000に変更になったとき 修正が2箇所に及ぶ 2007/12/13 情報システム構築 第10回
餅つき機から洗濯機に変更すると,餅つき機の単価情報が失われる 正規形 第1正規形で十分ではない例 タプル修正時異状(2) 餅つき機から洗濯機に変更すると,餅つき機の単価情報が失われる 2007/12/13 情報システム構築 第10回
2つの異なる事象のデータが1つのリレーションに格納されているから 正規形 更新時異状の原因 2つの異なる事象のデータが1つのリレーションに格納されているから 2つの事象 どの顧客がどの商品を何個注文したか ある商品の単価 それなら分解すればよい これをone fact in one relationといったりする 2007/12/13 情報システム構築 第10回
分解(decomposition) 正規形 リレーション 注文の 属性集合{顧客名,商品名,数量,金額}上の射影 2007/12/13 リレーション 注文の 属性集合{顧客名,商品名,数量,金額}上の射影 2007/12/13 情報システム構築 第10回
正規形 分解 リレーション 注文の 属性集合{商品名,単価}上の射影 2007/12/13 情報システム構築 第10回
「情報システム構築」 第10回 正規形 2007/12/13 分解 2007/12/13 情報システム構築 第10回
正規形 分解(何も考慮せず、無作為の分解) 2007/12/13 情報システム構築 第10回
正規形 自然結合(結合属性:商品名)をとる 意味のないタプル 意味のないタプル 結合のわな 2007/12/13 情報システム構築 第10回
正規形 リレーションの情報無損失分解 無損失ではない例 注文を{顧客名,商品名}、{商品名,数量,単価,金額}上の射影として分解すると、 自然結合の結果、意味のないタプルが出現する この現象を結合のわなという 2007/12/13 情報システム構築 第10回
情報損失分解(先の例を次のように分解) 正規形 意味のないタプル 意味のないタプル 元のRに無い 「結合のわな」 2007/12/13 情報システム構築 第10回
one fact in one relationに反している クルーの変更、乗客の追加、削除などが生じると「フライト」の変更が煩雑になる 正規形 多値従属性の例(参考書19p.87) one fact in one relationに反している クルーの変更、乗客の追加、削除などが生じると「フライト」の変更が煩雑になる 2007/12/13 情報システム構築 第10回
多値従属性の例 正規形 フライト番号が決まれば、複数のクルー名が決まる (多値従属) フライト番号が決まれば、複数の乗客名が決まる (多値従属) 2007/12/13 情報システム構築 第10回
正規形 多値従属性の例 2007/12/13 情報システム構築 第10回
関数従属性 正規形 関数(写像)関係 ・・ ・・ ・・ ・・ B1,B2,・・ ・・,Bm A1,A2,・・ ・・,Al 関数従属性 関数(写像)関係 ・・ ・・ ・・ ・・ B1,B2,・・ ・・,Bm A1,A2,・・ ・・,Al 注:ここでの「関数」は「写像」と同義 2007/12/13 情報システム構築 第10回
正規形 関数従属性 関数的に決定する 関数的に従属する 決定子、被決定子 関数従属性 A1A2・・・・Al → B1B2・・・・Bm が存在すると A・・・・はB・・・・を関数的に決定する B・・・・はA・・・・に関数的に従属する A・・・・を決定子という、B・・・・を被決定子という 2007/12/13 情報システム構築 第10回
顧客は同一商品を重複しては注文しないとする(主キーのキー制約に違反するので) 正規形 関数従属性の例 顧客は同一商品を重複しては注文しないとする(主キーのキー制約に違反するので) 2007/12/13 情報システム構築 第10回
関数従属性の例 正規形 f1:{顧客名,商品名}→数量 f2:商品名→単価 f3:{商品名,数量}→金額 f4:{数量,単価}→金額 f5:{数量,金額}→単価 2007/12/13 情報システム構築 第10回
第2正規形でない例(候補キー(主キー)の部分集合に関数従属しているスキーマ) 第2正規形 第2正規形でない例(候補キー(主キー)の部分集合に関数従属しているスキーマ) 候補キーの部分集合に関数従属している (単価は商品名に関数従属している) 非第2正規形 2007/12/13 情報システム構築 第10回
第2正規形 第2正規形への分解 商品の追加OK 2007/12/13 情報システム構築 第10回
(2)Rのすべての非キー属性はRのいかなる候補キーにも推移的に従属しない 第3正規形 第3正規形 (1)Rは第2正規形である (2)Rのすべての非キー属性はRのいかなる候補キーにも推移的に従属しない 2007/12/13 情報システム構築 第10回
第3正規形 第3正規形ではない 2007/12/13 情報システム構築 第10回
第3正規形 第3正規形ではない タプル挿入時異状 キー制約にふれる 2007/12/13 情報システム構築 第10回
第3正規形 第3正規形ではない タプル削除時異状 K58、静岡が失われる 2007/12/13 情報システム構築 第10回
第3正規形ではない タプル修正時異状 K41が東京から千葉に変更 鶴窪の所属がK58からK55に変更 第3正規形 第3正規形ではない タプル修正時異状 K41が東京から千葉に変更 鶴窪の所属がK58からK55に変更 K58、静岡が失われる 2007/12/13 情報システム構築 第10回
社員番号→勤務地という関数従属性は 社員番号→所属 ∧ 所属→勤務地 ⇒ 社員番号→勤務地 導出された推移的関数従属性 第3正規形 第3正規形ではない例 社員番号→勤務地という関数従属性は 社員番号→所属 ∧ 所属→勤務地 ⇒ 社員番号→勤務地 導出された推移的関数従属性 2007/12/13 情報システム構築 第10回
第3正規形 第3正規形に分解 2007/12/13 情報システム構築 第10回
student,course,teacher ボイスコッド正規形 ボイスコッド正規形(BCNF) 3NFであるが,BCNFではない例 主キー {学生名,科目名} 科目を担当する教官は複数 その中から1人を選ぶ 教官は1科目のみ担当 student,course,teacher 2007/12/13 情報システム構築 第10回
ボイスコッド正規形 ボイスコッド正規形 3NFであるが,BCNFではない例 2007/12/13 情報システム構築 第10回
ボイスコッド正規形 3NFであるが,BCNFではない例 タプル挿入時の異状 ボイスコッド正規形 2007/12/13 情報システム構築 第10回
ボイスコッド正規形 3NFであるが,BCNFではない例 タプル削除時の異状 ボイスコッド正規形 2007/12/13 情報システム構築 第10回
ボイスコッド正規形 3NFであるが,BCNFではない例 タプル修正時の異状 ボイスコッド正規形 認知科学 履修科目の変更 2007/12/13 情報システム構築 第10回
ボイスコッド正規形 ボイスコッド正規形への分解 2007/12/13 情報システム構築 第10回
決定子を候補キーに限定した正規形 ボイスコッド正規形 多値従属性に着目した正規形 第4正規形 第4正規形 第4正規形 関数従属性を用いた正規形 第2,第3正規形 決定子を候補キーに限定した正規形 ボイスコッド正規形 多値従属性に着目した正規形 第4正規形 2007/12/13 情報システム構築 第10回
多値従属性 フライト番号→→クルー名|乗客名 第4正規形 第4正規形 多値従属性 フライト番号→→クルー名|乗客名 直交 2007/12/13 情報システム構築 第10回
第4正規形 第4正規形に正規化 2007/12/13 情報システム構築 第10回
よりユーザーフレンドリーなインターフェース データベース言語SQL 基本機能 リレーショナル代数 集合論 リレーショナル論理 述語論理 リレーショナル完備 よりユーザーフレンドリーなインターフェース そこでSQL Structured Query Language そのルーツはIBM社SEQUEL Structured English Query Language 2007/12/13 情報システム構築 第10回
リレーショナル代数やリレーショナル論理に不足している機能 合計,平均,最大,といった自然な質問 集約関数の導入 プログラミング言語との連携 データベース言語SQL 基本機能 リレーショナル代数やリレーショナル論理に不足している機能 合計,平均,最大,といった自然な質問 集約関数の導入 プログラミング言語との連携 データベース言語 データ操作言語,定義機能を含む SQLは ISOの国際規格 JISの国内規格 2007/12/13 情報システム構築 第10回
データベース言語SQL 基本機能 リレーショナルデータベース言語の標準化 IBM サンノゼ研究所 SEQUEL カリフォルニア大学 INGRES QUEL IBM ワトソン研究所QBE データベース言語がバラバラである弊害 使用方法の習熟 ソフトウェアの書き換え 分散型データベースへの対応 選択 2007/12/13 情報システム構築 第10回
ANSI(American National Standards Institute) アメリカ国家規格協会 1980年 データベース言語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回
リレーショナルデータモデル 属性,タプル,リレーション SQL 列(column),行(row),表(table) データベース言語SQL 基本機能 SQLによる質問(問合せ) リレーショナルデータモデル 属性,タプル,リレーション SQL 列(column),行(row),表(table) 実表,ビュー表,導出表(問合せ結果) SQLの表では,重複したタプルの存在も可 マルチ集合 2007/12/13 情報システム構築 第10回
これは大事まずSELECT、FROM、WHERE と丸暗記しよう データベース言語SQL 基本機能 SQLによる質問(問合せ) 具体的な質問をすること 「問合せを指定する」 問合せ指定 問合せ指定の基本形 SELECT 選択リスト FROM 表参照リスト WHERE 探索条件 これは大事まずSELECT、FROM、WHERE と丸暗記しよう 2007/12/13 情報システム構築 第10回
データベース言語SQL 基本機能 SELECT 値式リスト リレーション代数の「射影」に相当 リレーション代数の「選択」には相当しない リレーション代数の「選択」は WHERE 探索条件が相当する 選択リスト 値式(ちしき)(あたいしき) 列名(属性名)を指定 ただし簡単な計算を指定することもできる 例 「給与」,「給与*2」 複数指定可能 2007/12/13 情報システム構築 第10回
FROM 表参照リスト 実表の名前 ビュー表の名前 複数指定可能 データベース言語SQL 基本機能 FROM 表参照リスト 実表の名前 ビュー表の名前 複数指定可能 WHERE 探索条件 m変数の述語,命題関数 導出表 結果リレーション 2007/12/13 情報システム構築 第10回
SELECT 社員名 FROM 社員 WHERE 所属=’K55’ データベース言語SQL 基本機能 例 SELECT 社員名 FROM 社員 WHERE 所属=’K55’ 導出表(結果) 2007/12/13 情報システム構築 第10回
表(SQL)とリレーション(理論)の違い データ型(ドメインに対応) データベース言語SQL 基本機能 表(SQL)とリレーション(理論)の違い データ型(ドメインに対応) 文字列型 概数型 真数型 集約関数のサポート COUNT、SUM、AVG、MAX、MIN DISTINCT,GROUP-BY,HAVING, ORDER-BY BETWEEN,IN,LIKE,NULL,EXISTS 親言語への組み込み 2007/12/13 情報システム構築 第10回
データベース言語SQL 基本機能 単純質問(単純問合せ) 2007/12/13 情報システム構築 第10回
(a)全商品の全属性 SELECT * --*はすべて FROM 商品 導出表 データベース言語SQL 基本機能 (a)全商品の全属性 SELECT * --*はすべて FROM 商品 導出表 2007/12/13 情報システム構築 第10回
(b)納品した商品の商品番号 SELECT 商品番号 FROM 納品 導出表 データベース言語SQL 基本機能 (b)納品した商品の商品番号 SELECT 商品番号 FROM 納品 導出表 どの商品が延べ何回取引されたかわかる 重複がある 重複がある 2007/12/13 情報システム構築 第10回
(c)納品した商品の商品番号,重複なし SELECT DISTINCT 商品番号 FROM 納品 導出表 データベース言語SQL 基本機能 (c)納品した商品の商品番号,重複なし SELECT DISTINCT 商品番号 FROM 納品 導出表 重複がない 2007/12/13 情報システム構築 第10回
(d)商品番号,定価,2割引の値段 SELECT 商品番号,定価,定価*0.8 FROM 商品 データベース言語SQL 基本機能 (d)商品番号,定価,2割引の値段 SELECT 商品番号,定価,定価*0.8 FROM 商品 導出表 列の名前はつかない 2007/12/13 情報システム構築 第10回
(e)定価が10万以上の商品の全列の値 SELECT * FROM 商品 WHERE 定価≧100000 データベース言語SQL 基本機能 (e)定価が10万以上の商品の全列の値 SELECT * FROM 商品 WHERE 定価≧100000 導出表 2007/12/13 情報システム構築 第10回
データベース言語SQL 基本機能 (e)定価が6万以上、20万以下の商品の全列の値 SELECT * FROM 商品 WHERE 定価 BETWEEN 60000 AND 200000 導出表 2007/12/13 情報システム構築 第10回
データベース言語SQL 基本機能 (e)定価が6万以上、20万以下の商品で、商品名がテレビの全列の値 SELECT * FROM 商品 WHERE 定価 BETWEEN 60000 AND 200000 AND 商品名=N’テレビ’ 導出表 2007/12/13 情報システム構築 第10回
(f)商品を定価の安いから高い順 SELECT * FROM 商品 ORDER BY 定価 ASC --ASCは省略可 (ascent) データベース言語SQL 基本機能 (f)商品を定価の安いから高い順 SELECT * FROM 商品 ORDER BY 定価 ASC --ASCは省略可 (ascent) 導出表 2007/12/13 情報システム構築 第10回
データベース言語SQL 基本機能 (f)商品を定価の高いから安い順 SELECT * FROM 商品 ORDER BY 定価 DESC --DESCはこの順でならべたいとき省略不可 (descent) 導出表 2007/12/13 情報システム構築 第10回
(g)納品した商品の総数を商品番号ごとに SELECT 商品番号,SUM(納品数量) FROM 納品 GROUP BY 商品番号 データベース言語SQL 基本機能 (g)納品した商品の総数を商品番号ごとに SELECT 商品番号,SUM(納品数量) FROM 納品 GROUP BY 商品番号 導出表 2007/12/13 情報システム構築 第10回
データベース言語SQL 基本機能 (g)納品した商品の総数を商品番号ごとに、納品数量が10以上 SELECT 商品番号,SUM(納品数量) FROM 納品 GROUP BY 商品番号 HAVING SUM(納品数量) ≧10 導出表 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 結合質問(join query) リレーショナル代数の結合(join)に相当 表参照リストに2つ以上指定 例「商品の商品番号と納品した商品の商品番号が等しい商品情報(商品の全属性値)と納品情報のすべての組を求めよ」 (商品表と納品表の等結合(equi-join)を属性,商品番号上でとる) 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 結合質問(join query) 等結合(equi-join)の例 SELECT 商品.*,納品.* FROM 商品,納品 WHERE 商品.商品番号=納品.商品番号 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 使用する表 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 等結合 商品.商品番号=納品.商品番号 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 等結合 例:「商品の商品番号と納品した商品の商品番号が等しい商品の全データと納品データの全ての組を求めよ」 SELECT 商品.*,納品.* FROM 商品,納品 WHERE 商品.商品番号=納品.商品番号 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 自然結合(natural join)の例 例:「商品データとそれを納入した顧客番号と納品数量を全て求めよ」 SELECT 商品.*,顧客番号,納品数量 FROM 商品,納品 WHERE 商品.商品番号=納品.商品番号 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 3つの表の自然結合 例:「納品状況を示す全ての商品名と顧客名と納品数量の組を求めよ」 SELECT 商品名,顧客名,納品数量 FROM 商品,納品,顧客 WHERE 商品.商品番号=納品.商品番号 AND 納品.顧客番号=顧客.顧客番号 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 自己結合(self-join)の例 同じ表を使用する 例:「上司よりも高給をとっている社員の社員番号とその上司の社員番号を求めよ」 SELECT X.社員番号,Y.社員番号 FROM 社員 X,社員 Y WHERE X.部長=Y.社員番号 AND X.給与>Y.給与 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 自己結合(self-join) 同じ表を使用する SELECT X.社員番号,Y.社員番号 FROM 社員 X,社員 Y WHERE X.部長=Y.社員番号 AND X.給与>Y.給与 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 自己結合(self-join) 同じ表を使用する SELECT X.社員番号,Y.社員番号 FROM 社員 X,社員 Y WHERE X.部長=Y.社員番号 AND X.給与>Y.給与 相関名またはタプル変数 X,Y 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 入れ子型質問 内側の問合せ 副問合せ 外側の問合せは主問合せ 例 SELECT 顧客番号,顧客名 FROM 顧客 WHERE 顧客番号 IN (SELECT 顧客番号 FROM 納品 WHERE 商品番号=’G1’) 副問合せ 主問合せ 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 SQLのリレーショナル完備性 すくなくともリレーショナル代数(リレーショナル論理)と同等な質問機能をもっているとき、リレーショナル完備という 和 差 直積 射影 選択 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 和 R∪S SELECT * FROM R UNION SELECT * FROM S ただし,RとSは和両立 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 差 R-S SELECT * FROM R WHERE NOT EXISTS (SELECT * FROM S) ただし,RとSは和両立 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 直積 R×S SELECT R.*, S.* FROM R,S 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 射影 R[Ai1,Ai2,・・ ・・,Aik] SELECT Ai1,Ai2,・・ ・・,Aik FROM R 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 選択 R[Ai θ Aj] SELECT * FROM R WHERE Ai θ Aj 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 更新操作 新しい行の挿入 不要となった行の削除 行の書き換え 2007/12/13 情報システム構築 第10回
データベース言語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回
データベース言語SQL 高度な問合せ指定機能 削除 DELETE FROM R WHERE 探索条件 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 書き換え UPDATE R SET A1’=式1 A2’=式2 ・・ ・・ Ap’=式p WHERE 探索条件 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 埋め込み型SQL プログラムからSQLを使用する SQLでは、PL/Ⅰ、C、COBOL、FORTRAN、ADA、MUMPS、PASCALがホスト言語(親言語)として規定されている EXEC SQLで始まり、 ; で終わる SQL文 ; プリプロセッサが処理する 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 埋め込み型SQL データの渡し方 次のBEGINからENDで挟み込んだところで、SQLと親言語両方で使用される変数を定義する 埋め込みSQLで使用するとき : をつける EXEC SQL BEGIN DECLARE SECTION; EXEC SQL END DECLARE SECTION; 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 埋め込み型SQL データの渡し方 INTO(SELECTした属性の値を、プログラムの中の変数に入れ込む) カーソルの使い方 エラーの受け渡し SQLSTATE、SQLCODE 2007/12/13 情報システム構築 第10回
データベース言語SQL 高度な問合せ指定機能 埋め込み型SQL カーソルの使い方 カーソルを定義(DECLARE CURSOR FOR この次にSQL文) カーソルを開く(OPEN) 1行をとりだす(FETCH) (複数の行はダメ、複数の属性はOK) 現在行の属性値を変数に入れる(INTO) カーソルを閉じる(CLOSE) 2007/12/13 情報システム構築 第10回
データベース言語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回
データベース言語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回
データベース言語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回
データベース言語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回
まとめと次回 データベース 次回 プロジェクト管理 2007/12/13 情報システム構築 第10回 「情報システム構築」 第10回