データベース技術
第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,100
1101 3/5 12 アメリカ
102 いちご ¥150 300
1102 3/7 23 中国 103 りんご ¥120 1,700
1103 3/8 25 フランス 104 レモン ¥200 500
18
非正規形
•繰り返し項目が排除されていない表
•リレーショナルデータベースでは、非正規形の
表はうまく処理できない
報告書コード 日付 輸出先コード 輸出先名 商品コード 商品名 単価 個数
1101 3/5 12 アメリカ
101 メロン ¥800 1,100
1101 3/5 12 アメリカ
102 いちご ¥150 300
1102 3/7 23 中国 103 りんご ¥120 1,700
1103 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,100
1101 3/5 12 アメリカ
102 いちご ¥150 300
1102 3/7 23 中国 103 りんご ¥120 1,700
1103 3/8 25 フランス 104 レモン ¥200 500
報告書コード 日付 輸出先コード 輸出先名
1101 3/5 12 アメリカ
1102 3/7 23 中国
1103 3/8 25 フランス
報告書コード 商品コード 商品名 単価 個数
1101 101 メロン ¥800 1,100
1101 102 いちご ¥150 300
1102 103 りんご ¥120 1,700
1103 104 レモン ¥200 500
「売上」表 「売上明細」表(第一正規形①) (第一正規形②)
表の関連がわかるよう
報告書コードは両方の表に残す
22
第一正規形
•表を2次元の単純な表としたもの
•1行に1つの値が入るようにした表
報告書コード 日付 輸出先コード 輸出先名
1101 3/5 12 アメリカ
1102 3/7 23 中国
1103 3/8 25 フランス
報告書コード 商品コード 商品名 単価 個数
1101 101 メロン ¥800 1,100
1101 102 いちご ¥150 300
1102 103 りんご ¥120 1,700
1103 104 レモン ¥200 500
「売上」表 「売上明細」表(第一正規形①) (第一正規形②)
23
第二正規形を作る(1)
•「売上明細」(第一正規形②)の問題点
- 商品に関するデータと売上に関するデータが混在  
→新しい商品でまだ売っていない商品は追加できない
「売上明細」表(第一正規形②)
報告書コード 商品コード 商品名 単価 個数
1101 101 メロン ¥800 1,100
1101 102 いちご ¥150 300
1102 103 りんご ¥120 1,700
1103 104 レモン ¥200 500
報告書コード 日付 輸出先コード 輸出先名
1101 3/5 12 アメリカ
1102 3/7 23 中国
1103 3/8 25 フランス
「売上」表(第一正規形①)
24
第二正規形を作る(2)
•「売上明細」(第一正規形②)を分割する
「売上明細」表(第一正規形②)
報告書コード 商品コード 商品名 単価 個数
1101 101 メロン ¥800 1,100
1101 102 いちご ¥150 300
1102 103 りんご ¥120 1,700
1103 104 レモン ¥200 500
商品コード 商品名 単価
101 メロン ¥800
102 いちご ¥150
103 りんご ¥120
104 レモン ¥200
報告書コード 商品コード 個数
1101 101 1,100
1101 102 300
1102 103 1,700
1103 104 500
「商品」表 「売上明細」表(第二正規形①) (第二正規形②)
25
第二正規形を作る(3)
•主キーによって他の列の値がきまる
- 「商品」表は、「商品コード」列の値が決まると 
「商品名」と「単価」の値が決まる
- 「売上明細」表は、「報告書コード」列と「商品コー
ド」列の値が決まると「個数」の値が決まる
商品コード 商品名 単価
101 メロン ¥800
102 いちご ¥150
103 りんご ¥120
104 レモン ¥200
報告書コード 商品コード 個数
1101 101 1,100
1101 102 300
1102 103 1,700
1103 104 500
「商品」表 「売上明細」表(第二正規形①) (第二正規形②)
26
第二正規形
•主キーによってほかの列の値が決まるように 
した表
•関数従属している
- 「ある列の値によってほかの列の値が決まる」こと
•第二正規形では、主キーにほかの列が関数従属
するように表を分割する
27
第二正規形の表まとめ
- 「売上」(第一正規形①)はそのままで第二正規形 
として扱える
• 主キーの「報告書コード」が決まると他の値が決まる
商品コード 商品名 単価
101 メロン ¥800
102 いちご ¥150
103 りんご ¥120
104 レモン ¥200
報告書コード 商品コード 個数
1101 101 1,100
1101 102 300
1102 103 1,700
1103 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 12
1102 3/7 23
1103 3/8 25
輸出先コード 輸出先名
12 アメリカ
23 中国
25 フランス
「売上」表(第三正規形①) 「輸出先」表(第三正規形②)
30
第三正規形
•各項目の値が、主キーのみで決まる表
•推移従属している
- 「ある列の値にによって間接的にほかの列の値が  
決まる」こと
•第三正規形では、推移従属を除くように表を 
分割する
31
第三正規形(補足)
•「売上」表(第二正規形③)では
- 「報告書コード」が決まれば、「輸出先コード」が 
決まり、それによって間接的に「輸出先名」が決まっ
ていた
報告書コード 日付 輸出先コード 輸出先名
1101 3/5 12 アメリカ
「売上」表(第二正規形③)
報告書コード 日付 輸出先コード
1101 3/5 12
輸出先コード 輸出先名
12 アメリカ
「売上」表(第三正規形①) 「輸出先」表(第三正規形②)
間接的に決まる部分を排除
32
第三正規形にまでにした表
•リレーショナルデータベースではこの表を使う
報告書コード 日付 輸出先コード
1101 3/5 12
1102 3/7 23
1103 3/8 25
輸出先コード 輸出先名
12 アメリカ
23 中国
25 フランス
「売上」表 「輸出先」表
商品コード 商品名 単価
101 メロン ¥800
102 いちご ¥150
103 りんご ¥120
104 レモン ¥200
報告書コード 商品コード 個数
1101 101 1,100
1101 102 300
1102 103 1,700
1103 104 500
「商品」表「売上明細」表
参照
参照
参照
33
Work:練習問題1
•次の表は、部署に所属する部員ごとの月別売上高
を表す表です。1つの部署には複数の部員が所属
します。部員は複数の部署に所属することはあり
ません。第三正規形に正規化してください。
部員コード 部員名 月 部員売上 部署コード 部署名
34
練習問題1:解答
部員コード 月 部員売上
部員コード 部員名 部署コード
部署コード 部署名
35
Work:練習問題2
•次の表は受注システムを表現したものです。第
三正規形に正規化してください。ただし、1件の
受注で1つの得意先を処理します。また、1件の
受注コードで複数の商品を処理することができ
ます。さらに1件の受注は1人の担当者が担当す
るものとします。
受注
コード
日付
得意先
コード
得意先名 商品コード 商品名 単価
担当者
コード
担当者名 個数
36
練習問題2:解答
受注コード 日付 担当者コード 得意先コード
得意先コード 得意先名
受注コード 商品コード 個数
商品コード 商品名 単価
担当者コード 担当者名
37

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