37
データベース技術 4回(2015.10.201

データベース技術 4(Database_4)

Embed Size (px)

Citation preview

Page 1: データベース技術 4(Database_4)

データベース技術第4回(2015.10.20)

1

Page 2: データベース技術 4(Database_4)

リレーショナルデータベース•用語(1)

-表(テーブル、table):リレーションとも呼ぶ-行(row、レコード):1件のデータこと-列(column、フィールド):各項目のこと

商品コード 商品名 単価 備考10 鉛筆 100 黒のみ20 赤ボールペン 110

30 ノート 200 30ページ40 黒ボールペン 110

商品表(商品テーブル)

2

Page 3: データベース技術 4(Database_4)

リレーショナルデータベース•用語(2)

-空値である(null):値が空であること-一意である(ユニーク、unique):同じ値がないこと-キー:重要な役割りを持つフィールド-主キー(primary key):データを識別するフィールド

• キーと主キーは一意であり、空値をとりません

商品表 商品コード 商品名 単価 備考10 鉛筆 100 黒のみ20 赤ボールペン 110

30 ノート 200 30ページ40 黒ボールペン 110

空値

空値

主キー

3

Page 4: データベース技術 4(Database_4)

リレーショナルデータベースの操作•操作の種類

-和(union)

-差(difference)

-積(intersection)

-直積(Cartesian product)

-射影(projection)

-選択(selection)

-結合(join)

-商(division)

集合演算と呼ばれる

関係演算と呼ばれる

4

Page 5: データベース技術 4(Database_4)

関係モデルと関係データベース•関係モデル(リレーショナルモデル)

-データを表形式で表す-データの関係を表と表の関係で表す-関係はそれぞれの表で共通の項目(キー)でつなげる

•関係データベース(リレーショナルデータベース)-リレーショナルモデルに基づいて設計、開発される  データベース

5

Page 6: データベース技術 4(Database_4)

関係モデルと関係データベース•関係モデル

-例:「商品」を「輸出先」に”売る”という関係

•関係モデルの考え方を使って関係データベースを設計する

商品コード 商品名 単価

101 メロン ¥800

102 いちご ¥150

輸出先コード 輸出先名12 アメリカ23 中国25 フランス

「商品」表 「輸出先」表

6

Page 7: データベース技術 4(Database_4)

データベース設計の手順•データとその関連(ER)を分析する

•表を作る

•表を正規化する-第一正規形

-第二正規形

-第三正規形

7

Page 8: データベース技術 4(Database_4)

データとその関連(ER)の分析•ERモデル

-現実世界をEntity(実体)とRelationship(関連)  という概念を使って考える

-現状の世界からにEntity(実体)をとらえる• 例:商品(商品コード、商品名、単価)• 例:輸出先(輸出先コード、輸出先名)

-実体同士のRelationship(関連)について考える• 例:売上

8

Page 9: データベース技術 4(Database_4)

ERモデル•Entity(実体)とRelationship(関連)

商品

商品コード

商品名

単価

輸出先輸出先コード

輸出先名

売上 個数

M

N

・多数の商品が多数の輸出先 に売られる・多数の輸出先は多数の商品 を買っている

多対多の関係

※商品がひとつの場合、 1対多の関係となります※商品ひとつ輸出先ひとつの場合、 1対1の関係となります

9

Page 10: データベース技術 4(Database_4)

ER図•ERモデルをよりデータベースの設計に近い形で図式化したもの

•様々な書き方がある

商品コード商品名単価

輸出先コード輸出先名

商品コード輸出先コード個数

商品 輸出先売上

1 * 1*

10

Page 11: データベース技術 4(Database_4)

Work:ERモデルを書いてみよう•問1

-部員は1人で複数の顧客を担当しています。    顧客が2人以上の部員によって担当されることはありません。

•問2

-学生は複数の書籍の貸出を受けることができます。 書籍は複数の学生に貸し出されます。

11

Page 12: データベース技術 4(Database_4)

Work解答•問1       ・問2

部員

顧客

担当

1

N

書籍

学生

貸出

M

N

12

Page 13: データベース技術 4(Database_4)

Work:ERモデルを書いてみよう•問3

-各学生は複数の講義を受講しています。      1つの講義は複数の学生が受講しています。     1人の教師は複数の講義を担当しています。     1つの講義は1人の教師が担当します。

13

Page 14: データベース技術 4(Database_4)

Work解答•問3

学生

講義

受講

M

N

担当

教師

M

1

14

Page 15: データベース技術 4(Database_4)

Work:ERモデルを書いてみよう•問4

-各顧客は複数の預金口座を開設できます。      1つの預金口座は1人の顧客によって開設されています。各銀行は複数の預金口座を管理しています。     1つの預金口座は1つの銀行によって管理されています。

15

Page 16: データベース技術 4(Database_4)

Work解答•問4

顧客

預金口座

開設

1

N

管理

銀行

M

1

16

Page 17: データベース技術 4(Database_4)

データベース設計の手順•データとその関連(ER)を分析する

•表を作る

•表を正規化する-第一正規形

-第二正規形

-第三正規形

17

Page 18: データベース技術 4(Database_4)

表を作成する•売上報告書から表を作成してみる

報告書コード 日付 輸出先コード 輸出先名 商品コード 商品名 単価 個数

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

Page 19: データベース技術 4(Database_4)

非正規形•繰り返し項目が排除されていない表

•リレーショナルデータベースでは、非正規形の表はうまく処理できない報告書コード 日付 輸出先コード 輸出先名 商品コード 商品名 単価 個数

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

Page 20: データベース技術 4(Database_4)

データベース設計の手順•データとその関連(ER)を分析する

•表を作る

•表を正規化する-第一正規形

-第二正規形

-第三正規形

20

Page 21: データベース技術 4(Database_4)

正規化•現実世界のデータをリレーショナルデータベースの表に落とし込む作業

•1行に1つの値が入る表の形にする

•非正規形の表をデータの矛盾が発生しないよう複数の表に分割する

21

Page 22: データベース技術 4(Database_4)

第一正規形を作る•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

Page 23: データベース技術 4(Database_4)

第一正規形•表を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

Page 24: データベース技術 4(Database_4)

第二正規形を作る(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

Page 25: データベース技術 4(Database_4)

第二正規形を作る(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

Page 26: データベース技術 4(Database_4)

第二正規形を作る(3)•主キーによって他の列の値がきまる

-「商品」表は、「商品コード」列の値が決まると 「商品名」と「単価」の値が決まる

-「売上明細」表は、「報告書コード」列と「商品コード」列の値が決まると「個数」の値が決まる

商品コード 商品名 単価101 メロン ¥800102 いちご ¥150103 りんご ¥120104 レモン ¥200

報告書コード 商品コード 個数1101 101 1,1001101 102 3001102 103 1,7001103 104 500

「商品」表 「売上明細」表(第二正規形①) (第二正規形②)

26

Page 27: データベース技術 4(Database_4)

第二正規形•主キーによってほかの列の値が決まるように した表

•関数従属している-「ある列の値によってほかの列の値が決まる」こと

•第二正規形では、主キーにほかの列が関数従属するように表を分割する

27

Page 28: データベース技術 4(Database_4)

第二正規形の表まとめ-「売上」(第一正規形①)はそのままで第二正規形 として扱える• 主キーの「報告書コード」が決まると他の値が決まる

商品コード 商品名 単価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

Page 29: データベース技術 4(Database_4)

第三正規形を作る(1)•「売上」(第二正規形③)の問題点

-「売上」表には、輸出先に関するデータと売上に関するデータが混在                   → 1度も輸出していないが輸出先には存在するイタリアを管理できない!

報告書コード 日付 輸出先コード 輸出先名

1101 3/5 12 アメリカ1102 3/7 23 中国1103 3/8 25 フランス

「売上」表(第二正規形③)

29

Page 30: データベース技術 4(Database_4)

第三正規形を作る(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

Page 31: データベース技術 4(Database_4)

第三正規形•各項目の値が、主キーのみで決まる表

•推移従属している-「ある列の値にによって間接的にほかの列の値が  決まる」こと

•第三正規形では、推移従属を除くように表を 分割する

31

Page 32: データベース技術 4(Database_4)

第三正規形(補足)•「売上」表(第二正規形③)では

-「報告書コード」が決まれば、「輸出先コード」が 決まり、それによって間接的に「輸出先名」が決まっていた

報告書コード 日付 輸出先コード 輸出先名

1101 3/5 12 アメリカ

「売上」表(第二正規形③)

報告書コード 日付 輸出先コード

1101 3/5 12輸出先コード 輸出先名

12 アメリカ

「売上」表(第三正規形①) 「輸出先」表(第三正規形②)

間接的に決まる部分を排除

32

Page 33: データベース技術 4(Database_4)

第三正規形にまでにした表•リレーショナルデータベースではこの表を使う

報告書コード 日付 輸出先コード

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

Page 34: データベース技術 4(Database_4)

Work:練習問題1•次の表は、部署に所属する部員ごとの月別売上高を表す表です。1つの部署には複数の部員が所属します。部員は複数の部署に所属することはありません。第三正規形に正規化してください。

部員コード 部員名 月 部員売上 部署コード 部署名

34

Page 35: データベース技術 4(Database_4)

練習問題1:解答

部員コード 月 部員売上

部員コード 部員名 部署コード

部署コード 部署名

35

Page 36: データベース技術 4(Database_4)

Work:練習問題2•次の表は受注システムを表現したものです。第三正規形に正規化してください。ただし、1件の受注で1つの得意先を処理します。また、1件の受注コードで複数の商品を処理することができます。さらに1件の受注は1人の担当者が担当するものとします。受注コード

日付得意先コード

得意先名 商品コード 商品名 単価担当者コード

担当者名 個数

36

Page 37: データベース技術 4(Database_4)

練習問題2:解答受注コード 日付 担当者コード 得意先コード

得意先コード 得意先名

受注コード 商品コード 個数

商品コード 商品名 単価

担当者コード 担当者名

37