データベース技術 5(database_5)

25
データベース技術 5回(2015.10.271

Upload: yuka-obu

Post on 19-Jan-2017

233 views

Category:

Education


0 download

TRANSCRIPT

Page 1: データベース技術 5(Database_5)

データベース技術第5回(2015.10.27)

1

Page 2: データベース技術 5(Database_5)

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

•表を作る

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

-第二正規形

-第三正規形

2

Page 3: データベース技術 5(Database_5)

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

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

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

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

3

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

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

商品

商品コード

商品名

単価

輸出先輸出先コード

輸出先名

売上 個数

M

N

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

多対多の関係

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

4

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

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

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

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つの値が入る表にすること5

Page 6: データベース技術 5(Database_5)

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

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

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

6

Page 7: データベース技術 5(Database_5)

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

「売上」表 「売上明細」表(第一正規形①) (第一正規形②)

7

Page 8: データベース技術 5(Database_5)

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

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

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

8

Page 9: データベース技術 5(Database_5)

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

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

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

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

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

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

9

Page 10: データベース技術 5(Database_5)

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

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

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

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

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

12 アメリカ

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

10

Page 11: データベース技術 5(Database_5)

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

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

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

「商品」表「売上明細」表

参照

参照

参照

11

Page 12: データベース技術 5(Database_5)

データベースの設計について•データベース設計はシステム設計の一部

業務の分析

要件定義

基本設計

論理設計

詳細設計

今の業務はどうなっているのか

何をしたいのか

どんなシステムにすべきか

どのように実現するか

方法を明確にする

データベース設計はこの段階に含まれるデータベースの設計=データベースの構造を設計する

12

Page 13: データベース技術 5(Database_5)

スキーマ•データベースの構造をスキーマと呼ぶ

•スキーマは3つの構造に分類される-概念スキーマ

• 論理的な構造を定義する• ER図の作成、テーブルの設計、論理設計、概念設計

-外部スキーマ• ユーザから見たデータベースを定義する• ビューの設計

-内部スキーマ• コンピュータ内部から見たデータベースを定義する• 物理的な部分を定義する• 容量、メモリ設計、物理設計、物理配置設計、インデックス設計

13

Page 14: データベース技術 5(Database_5)

概念スキーマ•データの論理的な構造を設計する段階

-現実世界をいかにコンピュータに置き換えるか考える-情報の流れを分析し、データベース化する部分を決定

•表を作って正規化する

•ER図を書く

•各テーブルのデータの型や長さを決定する

14

Page 15: データベース技術 5(Database_5)

表を作って正規化する•例:果物の輸出に関するデータ

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

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

「商品」表「売上明細」表

15

Page 16: データベース技術 5(Database_5)

ER図を書く

商品コード商品名単価

輸出先コード輸出先名

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

「商品」表

「輸出先」表「売上」表

1

1*

報告書コード商品コード個数

「売上明細」表

1*

16

Page 17: データベース技術 5(Database_5)

データの型や長さを決める(1)•データ型(MySQLの場合の一部)

型 説明INT 整数型(別名:INTEGER)

DOUBLE 浮動小数点数型DATE 日付型(フォーマット:'YYYY-MM-DD')

DATETIME 日付時刻型(フォーマット:'YYYY-MM-DD HH:MM:SS')TIME 時刻型(フォーマット:'HH:MM:SS')

CHAR文字列型(指定文字数以下の文字を格納した場合は末尾に空白を付け加える)

VARCHAR文字列型(指定文字数以下の文字を格納しても空白を加えない)

17

Page 18: データベース技術 5(Database_5)

データの型や長さを決める(2)•制約の種類

制約 説明

PRIMARY KEY主キー。一意に行を指定可能であることを保証する。複数列指定でもOK。NULLデータは扱えない。

FOREIGN KEY外部キー。外部のテーブルの主キーを指定する。表と表の関係を明示するために使う。

UNIQUE値の重複禁止を保証する。ただし、NULL値は複数OK。

CHECK挿入される値をチェックし、該当しないものははじく。(例:CHECK(社員ID > 0) =>マイナス値は不可)

NOT NULL NULL値でないことを保証する。18

Page 19: データベース技術 5(Database_5)

データの型や長さを決める(3)

「輸出先」表

「売上」表フィールド名 データ型 長さ 制約報告書コード INT 10 PRIMARY KEY, NOT NULL, AUTO_INCREMENT日付 DATE NOT NULL

輸出先コード INT 3 FOREIGN KEY

フィールド名 データ型 長さ 制約輸出先コード INT 3 PRIMARY KEY, NOT NULL輸出先名 VARCHAR 40 NOT NULL

※ AUTO_IMCREMENT:自動的に連番が格納される※ PRIMARY KEYを指定すると、自動的にNOT NULL, UNIQUEと判断される。 ここでは NOT NULLを明示している。

19

Page 20: データベース技術 5(Database_5)

データの型や長さを決める(3)

「商品」表フィールド名 データ型 長さ 制約商品コード INT 4 PRIMARY KEY, NOT NULL商品名 VARCHAR 40 NOT NULL単価 INT 10

「売上明細」表フィールド名 データ型 長さ 制約報告書コード INT 10 PRIMARY KEY, NOT NULL商品コード INT 4 PRIMARY KEY, NOT NULL個数 INT 5 NOT NULL

※「売上明細」表は報告書コードと商品コードを主キーとしている(複合キー)。 これは扱い難い場合があるので、明細IDなどを主キーとして設けることもある。

20

Page 21: データベース技術 5(Database_5)

スキーマ•データベースの構造をスキーマと呼ぶ

•スキーマは3つの構造に分類される-概念スキーマ

• 論理的な構造を定義する• ER図の作成、テーブルの設計、論理設計、概念設計

-外部スキーマ• ユーザから見たデータベースを定義する• ビューの設計

-内部スキーマ• コンピュータ内部から見たデータベースを定義する• 物理的な部分を定義する• 容量、メモリ設計、物理設計、物理配置設計、インデックス設計

21

Page 22: データベース技術 5(Database_5)

外部スキーマ•ユーザから見やすいデータベースを設計する

-概念スキーマで設計された表は効率の良い形だが、 ユーザにはわかり難い

-外部スキーマではユーザが扱いやすい「見える」表(ビュー View)を定義する

日付 輸出先コード 商品コード 個数3/5 12 101 1,1003/6 25 102 300

日付 輸出先名 商品名 個数3/5 アメリカ メロン 1,1003/6 フランス いちご 300

わかり難い

わかりやすい22

Page 23: データベース技術 5(Database_5)

内部スキーマ•コンピュータ内部の物理的な設計を行う

-ディスクのどこに作成するか?

-データベースのファイル名は?

-データサイズはどのくらいか?

-バックアップメディアは何を使うか?

•ハード的な仕様の決定は重要-データベースの処理速度に大きな影響を持つ場合がある

23

Page 24: データベース技術 5(Database_5)

データベースの設計について•データベース設計はシステム設計の一部

業務の分析

要件定義

基本設計

論理設計

詳細設計

今の業務はどうなっているのか

何をしたいのか

どんなシステムにすべきか

どのように実現するか

方法を明確にする

データベース設計はこの段階に含まれるデータベースの設計・概念スキーマ ←今ここ・外部スキーマ・内部スキーマ

24

Page 25: データベース技術 5(Database_5)

Work:概念スキーマを作成する•各自でテーマを決定する

•データベースの概念スキーマを定義しましょう-表を作って正規化する

- ER図を書く

-各テーブルのデータの型や長さを決定する

25