データベース技術第4回(2015.10.20)
1
リレーショナルデータベース•用語(1)
-表(テーブル、table):リレーションとも呼ぶ-行(row、レコード):1件のデータこと-列(column、フィールド):各項目のこと
商品コード 商品名 単価 備考10 鉛筆 100 黒のみ20 赤ボールペン 110
30 ノート 200 30ページ40 黒ボールペン 110
商品表(商品テーブル)
行
列
2
リレーショナルデータベース•用語(2)
-空値である(null):値が空であること-一意である(ユニーク、unique):同じ値がないこと-キー:重要な役割りを持つフィールド-主キー(primary key):データを識別するフィールド
• キーと主キーは一意であり、空値をとりません
商品表 商品コード 商品名 単価 備考10 鉛筆 100 黒のみ20 赤ボールペン 110
30 ノート 200 30ページ40 黒ボールペン 110
空値
空値
主キー
3
リレーショナルデータベースの操作•操作の種類
-和(union)
-差(difference)
-積(intersection)
-直積(Cartesian product)
-射影(projection)
-選択(selection)
-結合(join)
-商(division)
集合演算と呼ばれる
関係演算と呼ばれる
4
関係モデルと関係データベース•関係モデル(リレーショナルモデル)
-データを表形式で表す-データの関係を表と表の関係で表す-関係はそれぞれの表で共通の項目(キー)でつなげる
•関係データベース(リレーショナルデータベース)-リレーショナルモデルに基づいて設計、開発される データベース
5
関係モデルと関係データベース•関係モデル
-例:「商品」を「輸出先」に”売る”という関係
•関係モデルの考え方を使って関係データベースを設計する
商品コード 商品名 単価
101 メロン ¥800
102 いちご ¥150
輸出先コード 輸出先名12 アメリカ23 中国25 フランス
「商品」表 「輸出先」表
6
データベース設計の手順•データとその関連(ER)を分析する
•表を作る
•表を正規化する-第一正規形
-第二正規形
-第三正規形
7
データとその関連(ER)の分析•ERモデル
-現実世界をEntity(実体)とRelationship(関連) という概念を使って考える
-現状の世界からにEntity(実体)をとらえる• 例:商品(商品コード、商品名、単価)• 例:輸出先(輸出先コード、輸出先名)
-実体同士のRelationship(関連)について考える• 例:売上
8
ERモデル•Entity(実体)とRelationship(関連)
商品
商品コード
商品名
単価
輸出先輸出先コード
輸出先名
売上 個数
M
N
・多数の商品が多数の輸出先 に売られる・多数の輸出先は多数の商品 を買っている
多対多の関係
※商品がひとつの場合、 1対多の関係となります※商品ひとつ輸出先ひとつの場合、 1対1の関係となります
9
ER図•ERモデルをよりデータベースの設計に近い形で図式化したもの
•様々な書き方がある
商品コード商品名単価
輸出先コード輸出先名
商品コード輸出先コード個数
商品 輸出先売上
1 * 1*
10
Work:ERモデルを書いてみよう•問1
-部員は1人で複数の顧客を担当しています。 顧客が2人以上の部員によって担当されることはありません。
•問2
-学生は複数の書籍の貸出を受けることができます。 書籍は複数の学生に貸し出されます。
11
Work解答•問1 ・問2
部員
顧客
担当
1
N
書籍
学生
貸出
M
N
12
Work:ERモデルを書いてみよう•問3
-各学生は複数の講義を受講しています。 1つの講義は複数の学生が受講しています。 1人の教師は複数の講義を担当しています。 1つの講義は1人の教師が担当します。
13
Work解答•問3
学生
講義
受講
M
N
担当
教師
M
1
14
Work:ERモデルを書いてみよう•問4
-各顧客は複数の預金口座を開設できます。 1つの預金口座は1人の顧客によって開設されています。各銀行は複数の預金口座を管理しています。 1つの預金口座は1つの銀行によって管理されています。
15
Work解答•問4
顧客
預金口座
開設
1
N
管理
銀行
M
1
16
データベース設計の手順•データとその関連(ER)を分析する
•表を作る
•表を正規化する-第一正規形
-第二正規形
-第三正規形
17
表を作成する•売上報告書から表を作成してみる
報告書コード 日付 輸出先コード 輸出先名 商品コード 商品名 単価 個数
1101 3/5 12 アメリカ 101 メロン ¥800 1,1001101 3/5 12 アメリカ
102 いちご ¥150 3001102 3/7 23 中国 103 りんご ¥120 1,7001103 3/8 25 フランス 104 レモン ¥200 500
18
非正規形•繰り返し項目が排除されていない表
•リレーショナルデータベースでは、非正規形の表はうまく処理できない報告書コード 日付 輸出先コード 輸出先名 商品コード 商品名 単価 個数
1101 3/5 12 アメリカ 101 メロン ¥800 1,1001101 3/5 12 アメリカ
102 いちご ¥150 3001102 3/7 23 中国 103 りんご ¥120 1,7001103 3/8 25 フランス 104 レモン ¥200 500
1行分のデータの中に2つの商品のデータが存在する
正規化する:1行に1つの値が入る表にすること19
データベース設計の手順•データとその関連(ER)を分析する
•表を作る
•表を正規化する-第一正規形
-第二正規形
-第三正規形
20
正規化•現実世界のデータをリレーショナルデータベースの表に落とし込む作業
•1行に1つの値が入る表の形にする
•非正規形の表をデータの矛盾が発生しないよう複数の表に分割する
21
第一正規形を作る•1行に1つの値が入るように表を分割する
報告書コード 日付 輸出先コード 輸出先名 商品コード 商品名 単価 個数
1101 3/5 12 アメリカ 101 メロン ¥800 1,1001101 3/5 12 アメリカ
102 いちご ¥150 3001102 3/7 23 中国 103 りんご ¥120 1,7001103 3/8 25 フランス 104 レモン ¥200 500
報告書コード 日付 輸出先コード 輸出先名
1101 3/5 12 アメリカ1102 3/7 23 中国1103 3/8 25 フランス
報告書コード 商品コード 商品名 単価 個数1101 101 メロン ¥800 1,1001101 102 いちご ¥150 3001102 103 りんご ¥120 1,7001103 104 レモン ¥200 500
「売上」表 「売上明細」表(第一正規形①) (第一正規形②)
表の関連がわかるよう報告書コードは両方の表に残す
22
第一正規形•表を2次元の単純な表としたもの
•1行に1つの値が入るようにした表
報告書コード 日付 輸出先コード 輸出先名
1101 3/5 12 アメリカ1102 3/7 23 中国1103 3/8 25 フランス
報告書コード 商品コード 商品名 単価 個数1101 101 メロン ¥800 1,1001101 102 いちご ¥150 3001102 103 りんご ¥120 1,7001103 104 レモン ¥200 500
「売上」表 「売上明細」表(第一正規形①) (第一正規形②)
23
第二正規形を作る(1)•「売上明細」(第一正規形②)の問題点
-商品に関するデータと売上に関するデータが混在 →新しい商品でまだ売っていない商品は追加できない
「売上明細」表(第一正規形②)報告書コード 商品コード 商品名 単価 個数
1101 101 メロン ¥800 1,1001101 102 いちご ¥150 3001102 103 りんご ¥120 1,7001103 104 レモン ¥200 500
報告書コード 日付 輸出先コード 輸出先名
1101 3/5 12 アメリカ1102 3/7 23 中国1103 3/8 25 フランス
「売上」表(第一正規形①)
24
第二正規形を作る(2)•「売上明細」(第一正規形②)を分割する
「売上明細」表(第一正規形②)報告書コード 商品コード 商品名 単価 個数
1101 101 メロン ¥800 1,1001101 102 いちご ¥150 3001102 103 りんご ¥120 1,7001103 104 レモン ¥200 500
商品コード 商品名 単価101 メロン ¥800102 いちご ¥150103 りんご ¥120104 レモン ¥200
報告書コード 商品コード 個数1101 101 1,1001101 102 3001102 103 1,7001103 104 500
「商品」表 「売上明細」表(第二正規形①) (第二正規形②)
25
第二正規形を作る(3)•主キーによって他の列の値がきまる
-「商品」表は、「商品コード」列の値が決まると 「商品名」と「単価」の値が決まる
-「売上明細」表は、「報告書コード」列と「商品コード」列の値が決まると「個数」の値が決まる
商品コード 商品名 単価101 メロン ¥800102 いちご ¥150103 りんご ¥120104 レモン ¥200
報告書コード 商品コード 個数1101 101 1,1001101 102 3001102 103 1,7001103 104 500
「商品」表 「売上明細」表(第二正規形①) (第二正規形②)
26
第二正規形•主キーによってほかの列の値が決まるように した表
•関数従属している-「ある列の値によってほかの列の値が決まる」こと
•第二正規形では、主キーにほかの列が関数従属するように表を分割する
27
第二正規形の表まとめ-「売上」(第一正規形①)はそのままで第二正規形 として扱える• 主キーの「報告書コード」が決まると他の値が決まる
商品コード 商品名 単価101 メロン ¥800102 いちご ¥150103 りんご ¥120104 レモン ¥200
報告書コード 商品コード 個数1101 101 1,1001101 102 3001102 103 1,7001103 104 500
「商品」表 「売上明細」表(第二正規形①) (第二正規形②)
報告書コード 日付 輸出先コード 輸出先名
1101 3/5 12 アメリカ1102 3/7 23 中国1103 3/8 25 フランス
「売上」表(第二正規形③)
28
第三正規形を作る(1)•「売上」(第二正規形③)の問題点
-「売上」表には、輸出先に関するデータと売上に関するデータが混在 → 1度も輸出していないが輸出先には存在するイタリアを管理できない!
報告書コード 日付 輸出先コード 輸出先名
1101 3/5 12 アメリカ1102 3/7 23 中国1103 3/8 25 フランス
「売上」表(第二正規形③)
29
第三正規形を作る(2)•「売上」表(第二正規形③)を分割する
報告書コード 日付 輸出先コード 輸出先名
1101 3/5 12 アメリカ1102 3/7 23 中国1103 3/8 25 フランス
「売上」表(第二正規形③)
報告書コード 日付 輸出先コード
1101 3/5 121102 3/7 231103 3/8 25
輸出先コード 輸出先名
12 アメリカ23 中国25 フランス
「売上」表(第三正規形①) 「輸出先」表(第三正規形②)
30
第三正規形•各項目の値が、主キーのみで決まる表
•推移従属している-「ある列の値にによって間接的にほかの列の値が 決まる」こと
•第三正規形では、推移従属を除くように表を 分割する
31
第三正規形(補足)•「売上」表(第二正規形③)では
-「報告書コード」が決まれば、「輸出先コード」が 決まり、それによって間接的に「輸出先名」が決まっていた
報告書コード 日付 輸出先コード 輸出先名
1101 3/5 12 アメリカ
「売上」表(第二正規形③)
報告書コード 日付 輸出先コード
1101 3/5 12輸出先コード 輸出先名
12 アメリカ
「売上」表(第三正規形①) 「輸出先」表(第三正規形②)
間接的に決まる部分を排除
32
第三正規形にまでにした表•リレーショナルデータベースではこの表を使う
報告書コード 日付 輸出先コード
1101 3/5 121102 3/7 231103 3/8 25
輸出先コード 輸出先名
12 アメリカ23 中国25 フランス
「売上」表 「輸出先」表
商品コード 商品名 単価101 メロン ¥800102 いちご ¥150103 りんご ¥120104 レモン ¥200
報告書コード 商品コード 個数1101 101 1,1001101 102 3001102 103 1,7001103 104 500
「商品」表「売上明細」表
参照
参照
参照
33
Work:練習問題1•次の表は、部署に所属する部員ごとの月別売上高を表す表です。1つの部署には複数の部員が所属します。部員は複数の部署に所属することはありません。第三正規形に正規化してください。
部員コード 部員名 月 部員売上 部署コード 部署名
34
練習問題1:解答
部員コード 月 部員売上
部員コード 部員名 部署コード
部署コード 部署名
35
Work:練習問題2•次の表は受注システムを表現したものです。第三正規形に正規化してください。ただし、1件の受注で1つの得意先を処理します。また、1件の受注コードで複数の商品を処理することができます。さらに1件の受注は1人の担当者が担当するものとします。受注コード
日付得意先コード
得意先名 商品コード 商品名 単価担当者コード
担当者名 個数
36
練習問題2:解答受注コード 日付 担当者コード 得意先コード
得意先コード 得意先名
受注コード 商品コード 個数
商品コード 商品名 単価
担当者コード 担当者名
37