Slide 1

Slide 1 text

正規化理論ことはじめ 
 -数学的背景から理解する正規化の初手-


Slide 2

Slide 2 text

© 2022 for LANCERS, Inc. All Rights Reserved 2 2 久保 路(くぼ あゆむ) ・ ~ 2020.03 大学院で数学を研究 ・ 2020.04 ~ 2021.12 BIチームに所属しSalesforce管理・開発 ・ 2022.01~ 現在 QAチームに所属しCakePHP2→4への  バージョンアッププロジェクトなどに参画中 ・クエリチューニングをきっかけに  RDBの勉強にハマる ・クラフトビールが好き

Slide 3

Slide 3 text

© 2022 for LANCERS, Inc. All Rights Reserved 3 正規化って何でしょう?

Slide 4

Slide 4 text

© 2022 for LANCERS, Inc. All Rights Reserved 4 前の僕「なんかいい具合に テーブル分割することよね」

Slide 5

Slide 5 text

© 2022 for LANCERS, Inc. All Rights Reserved 5 5 今日持ち帰っていただきたいこと ・「いい具合に」分解するとは何か ・正規化の最初のステップである  第1正規化・第2正規化の理論と手法について ・正規化がなぜ良い分解とされているか

Slide 6

Slide 6 text

© 2022 for LANCERS, Inc. All Rights Reserved 6 6 モチベーション ・理論の本質やストーリーを理解すれば  実践や派生した理論に応用が効く(であろう) ・内部構造や理論を追うのが面白い

Slide 7

Slide 7 text

© 2022 for LANCERS, Inc. All Rights Reserved 7 7 1 RDBにおける用語の整理 2 第1正規化 3 理想的な分解 4 第2正規化 5 最後に アジェンダ

Slide 8

Slide 8 text

RDBにおける用語の整理


Slide 9

Slide 9 text

© 2022 for LANCERS, Inc. All Rights Reserved 9 ● いくつかの集合(ドメイン)の組み合わせ(の部分集合)を指す ● 例 名前の集合 D_1 = {太郎,花子,二郎}, 年齢の集合 D_2 = {20,25} の組み合わせから R(D_1,D_2) = { (太郎,20), (花子,25), (二郎,20) } のようなリレーションができる ● リレーションは表として実現することができる リレーションとは

Slide 10

Slide 10 text

© 2022 for LANCERS, Inc. All Rights Reserved 10 ● 例 ○ D_1 = {太郎,花子,二郎}, D_2 = {20,25} の組み合わせから R(D_1,D_2) = { (太郎,20), (花子,25), (二郎,20) } のようなリレーションができる リレーションとは 名前 年齢 太郎 20 花子 25 二郎 20

Slide 11

Slide 11 text

© 2022 for LANCERS, Inc. All Rights Reserved 11 リレーションとは 名前 年齢 太郎 20 花子 25 二郎 20 列 / カラム ● 例 ○ D_1 = {太郎,花子,二郎}, D_2 = {20,25} の組み合わせから R(D_1,D_2) = { (太郎,20), (花子,25), (二郎,20) } のようなリレーションができる

Slide 12

Slide 12 text

© 2022 for LANCERS, Inc. All Rights Reserved 12 リレーションとは 名前 年齢 太郎 20 花子 25 二郎 20 行 / タプル ● 例 ○ D_1 = {太郎,花子,二郎}, D_2 = {20,25} の組み合わせから R(D_1,D_2) = { (太郎,20), (花子,25), (二郎,20) } のようなリレーションができる

Slide 13

Slide 13 text

© 2022 for LANCERS, Inc. All Rights Reserved 13 リレーションとは 名前 年齢 太郎 20 花子 25 二郎 20 属性名 ● 例 ○ D_1 = {太郎,花子,二郎}, D_2 = {20,25} の組み合わせから R(D_1,D_2) = { (太郎,20), (花子,25), (二郎,20) } のようなリレーションができる

Slide 14

Slide 14 text

© 2022 for LANCERS, Inc. All Rights Reserved 14 ● リレーションの属性名の集合Kが候補キーであるとは次を満たすこと ○ リレーションの任意の行 t と sに対して tのKの値とsのKの値が一致すれば、tとsは完全一致する ○ Kの自身を除く部分集合に対しては、上記は成り立たない 候補キーとは

Slide 15

Slide 15 text

© 2022 for LANCERS, Inc. All Rights Reserved 15 ● リレーションの属性名の集合Kが候補キーであるとは次を満たすこと ○ リレーションの任意の行 t と sに対して tのKの値とsのKの値が一致すれば、tとsは完全一致する → Kの値さえ決まれば、行が一意に定まる ○ Kの自身を除く部分集合に対しては、上記は成り立たない → Kを分解してしまうと、行を一意に識別できなくなってしまう 候補キーとは

Slide 16

Slide 16 text

© 2022 for LANCERS, Inc. All Rights Reserved 16 「日本人」というリレーション を考えてみよう

Slide 17

Slide 17 text

© 2022 for LANCERS, Inc. All Rights Reserved 17

Slide 18

Slide 18 text

© 2022 for LANCERS, Inc. All Rights Reserved 18 1人の人間に対し、色んな情報が存在する

Slide 19

Slide 19 text

© 2022 for LANCERS, Inc. All Rights Reserved 19 姓名 年齢 生年月日 住所 個人番号 星座 性別 郵便番号

Slide 20

Slide 20 text

© 2022 for LANCERS, Inc. All Rights Reserved 20 個人番号 姓名 年齢 住所 生年月日 性別 郵便番号 星座 00001 山田太郎 26 東京都 墨田区 押上1丁目 1−2 1996/01/01 男 1310045 山羊座 00002 田中花子 22 東京都 港区 芝公園4丁目 2−8 2000/01/01 女 1050011 山羊座 各ドメインを組み合わせてリレーション「日本人」が作れる

Slide 21

Slide 21 text

© 2022 for LANCERS, Inc. All Rights Reserved 21 行(1人の人間)を一意に特定できる属性はどれでしょうか?

Slide 22

Slide 22 text

© 2022 for LANCERS, Inc. All Rights Reserved 22 姓名 年齢 生年月日 住所 個人番号 星座 性別 郵便番号

Slide 23

Slide 23 text

© 2022 for LANCERS, Inc. All Rights Reserved 23 姓名 年齢 生年月日 住所 個人番号 性別 星座 郵便番号

Slide 24

Slide 24 text

© 2022 for LANCERS, Inc. All Rights Reserved 24 姓名 年齢 生年月日 住所 個人番号 性別 行を特定できる =候補キー

Slide 25

Slide 25 text

© 2022 for LANCERS, Inc. All Rights Reserved 25 姓名 年齢 生年月日 住所 個人番号 性別 星座 郵便番号 候補キーに1つ属性を 加えても行を特定できるから 候補キーになるのでは?

Slide 26

Slide 26 text

© 2022 for LANCERS, Inc. All Rights Reserved 26 ● リレーションの属性名の集合Kが候補キーであるとは次を満たすこと ○ リレーションの任意の行 t と sに対して tのKの値とsのKの値が一致すれば、tとsは完全一致する → Kの値さえ決まれば、行が一意に定まる ○ Kの自身を除く部分集合に対しては、上記は成り立たない → Kを分解してしまうと、行を一意に識別できなくなってしまう 候補キーとは

Slide 27

Slide 27 text

© 2022 for LANCERS, Inc. All Rights Reserved 27 姓名 年齢 生年月日 住所 個人番号 性別 星座 個人番号だけで行を特定できるので(年 齢,個人番号)は候補キーではない! →候補キーは行を特定できる属性の   極小の組み合わせ

Slide 28

Slide 28 text

第1正規化


Slide 29

Slide 29 text

© 2022 for LANCERS, Inc. All Rights Reserved 29 ● リレーションに対して、リレーションを構成している各集合が 複数の集合の直積やある集合の冪集合ではない時 そのリレーションが第1正規形であるという →各カラムの値が複数の値の集まりなどではなく  常に単一の値であること 第1正規形とは

Slide 30

Slide 30 text

© 2022 for LANCERS, Inc. All Rights Reserved 30 第1正規形ではない リレーションの例

Slide 31

Slide 31 text

© 2022 for LANCERS, Inc. All Rights Reserved 31 社員番号 社員名 趣味 1000 (山田,太郎) 釣り 1001 (田中,花子) 釣り 1002 (山本,邦明) 釣り リレーション 社員

Slide 32

Slide 32 text

© 2022 for LANCERS, Inc. All Rights Reserved 32 社員番号 社員名 趣味 1000 (山田,太郎) 釣り 1001 (田中,花子) 釣り 1002 (山本,邦明) 釣り リレーション 社員 姓の集合と名の集合の直積となっている → 単一の値になっていない →第1正規形ではない

Slide 33

Slide 33 text

© 2022 for LANCERS, Inc. All Rights Reserved 33 第1正規形に直してみると

Slide 34

Slide 34 text

© 2022 for LANCERS, Inc. All Rights Reserved 34 社員番号 社員名 趣味 1000 (山田,太郎) 釣り 1001 (田中,花子) 釣り 1002 (山本,邦明) 釣り リレーション 社員 社員番号 社員名(姓) 社員名(名) 趣味 1000 山田 太郎 釣り 1001 田中 花子 釣り 1002 山本 邦明 釣り

Slide 35

Slide 35 text

© 2022 for LANCERS, Inc. All Rights Reserved 35 もう1つ 第1正規形ではない リレーションの例

Slide 36

Slide 36 text

© 2022 for LANCERS, Inc. All Rights Reserved 36 社員番号 社員名 趣味 1000 山田太郎 {ギター,釣り} 1001 田中花子 {編み物,釣り} リレーション 社員

Slide 37

Slide 37 text

© 2022 for LANCERS, Inc. All Rights Reserved 37 社員番号 社員名 趣味 1000 山田太郎 {ギター,釣り} 1001 田中花子 {編み物,釣り} リレーション 社員 趣味の集合の冪集合となっている → 単一の値になっていない →第1正規形ではない

Slide 38

Slide 38 text

© 2022 for LANCERS, Inc. All Rights Reserved 38 第1正規形に直してみると

Slide 39

Slide 39 text

© 2022 for LANCERS, Inc. All Rights Reserved 39 社員番号 社員名 趣味 1000 山田太郎 {ギター,釣り} 1001 田中花子 {編み物,釣り} リレーション 社員 社員番号 社員名 趣味 1000 山田太郎 ギター 1000 山田太郎 釣り 1001 田中花子 編み物 1001 田中花子 釣り

Slide 40

Slide 40 text

© 2022 for LANCERS, Inc. All Rights Reserved 40 ● 各カラムの値が複数の値の集まりなどではなく常に単一の値であるリレー ションを第1正規形であるという ● 第1正規形の条件を満たすように リレーションを修正することを第1正規化という ● 複雑性の回避のために第1正規化のステップが必要 第1正規形とは

Slide 41

Slide 41 text

理想的な分解


Slide 42

Slide 42 text

© 2022 for LANCERS, Inc. All Rights Reserved 42 第2正規化の紹介の前に リレーションをどのように分解するのが 理想かを追ってみる

Slide 43

Slide 43 text

© 2022 for LANCERS, Inc. All Rights Reserved 43 そもそも リレーションを分解しないと どうなってしまう?

Slide 44

Slide 44 text

© 2022 for LANCERS, Inc. All Rights Reserved 44 ● 更新時異状とは行を更新・挿入する際に起こる不都合な状況を指す ○ タプル挿入時異状 ○ タプル削除時異状 ○ タプル修正時異状 更新時異状

Slide 45

Slide 45 text

© 2022 for LANCERS, Inc. All Rights Reserved 45 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 リレーション 注文

Slide 46

Slide 46 text

© 2022 for LANCERS, Inc. All Rights Reserved 46 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 ● タプル挿入時異状 →新しい商品を追加しようとしても、顧客名が定まらないと挿入できない ● タプル削除時異状 →B企業の洗濯機の注文行を消すと、洗濯機の単価情報を抹消される ● タプル修正時異状 →テレビの単価が変更になったとすると、2行分更新する必要がある リレーション 注文

Slide 47

Slide 47 text

© 2022 for LANCERS, Inc. All Rights Reserved 47 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 ● タプル挿入時異状 →新しい商品を追加しようとしても、顧客名が定まらないと挿入できない ● タプル削除時異状 →B企業の洗濯機の注文行を消すと、洗濯機の単価情報を抹消される ● タプル修正時異状 →テレビの単価が変更になったとすると、2行分更新する必要がある リレーション 注文

Slide 48

Slide 48 text

© 2022 for LANCERS, Inc. All Rights Reserved 48 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 リレーション 注文 - 掃除機 3 - 90000 - 掃除機を新たに売り出すことになったので 以下のようなレコードを追加したい

Slide 49

Slide 49 text

© 2022 for LANCERS, Inc. All Rights Reserved 49 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 リレーション 注文 - 掃除機 3 - 90000 - 主キー

Slide 50

Slide 50 text

© 2022 for LANCERS, Inc. All Rights Reserved 50 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 リレーション 注文 - 掃除機 3 - 90000 - 主キー 主キーはNULLを許さないので、挿入できない

Slide 51

Slide 51 text

© 2022 for LANCERS, Inc. All Rights Reserved 51 なぜ更新時異状が起こるか

Slide 52

Slide 52 text

© 2022 for LANCERS, Inc. All Rights Reserved 52 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 ● タプル挿入時異状 →新しい商品を追加しようとしても、顧客名が定まらないと挿入できない ● タプル削除時異状 →B企業の洗濯機の注文行を消すと、洗濯機の単価情報を抹消される ● タプル修正時異状 →テレビの単価が変更になったとすると、2行分更新する必要がある リレーション 注文

Slide 53

Slide 53 text

© 2022 for LANCERS, Inc. All Rights Reserved 53 リレーション 注文 注文内容について 商品内容について 1つのリレーションに2つの異なる事象が混在している! 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000

Slide 54

Slide 54 text

© 2022 for LANCERS, Inc. All Rights Reserved 54 ということは 各事象毎に分解すれば良さそう

Slide 55

Slide 55 text

© 2022 for LANCERS, Inc. All Rights Reserved 55 しかし...不安と疑問が残る

Slide 56

Slide 56 text

© 2022 for LANCERS, Inc. All Rights Reserved 56 ● 更新時異状を避けるためには、各事象ごとに分解すれば良い →各事象ごとにひたすら分解すればOK? →「各事象ごとに分解」は人によって解釈が違ったりしない?

Slide 57

Slide 57 text

© 2022 for LANCERS, Inc. All Rights Reserved 57 ● 更新時異状を避けるためには、各事象ごとに分解すれば良い →各事象ごとにひたすら分解すればOK? →「各事象ごとに分解」は人によって解釈が違ったりしない?

Slide 58

Slide 58 text

© 2022 for LANCERS, Inc. All Rights Reserved 58 満たしておきたい分解の条件

Slide 59

Slide 59 text

© 2022 for LANCERS, Inc. All Rights Reserved 59 ● リレーションRがR1とR2に分解されたとする。 以下を満たす時、その分解が情報無損失分解であるという ○ R = R1 * R2 (ここで * は自然結合) → 分解した結果を結合したら元のリレーションが手に入る 情報無損失分解

Slide 60

Slide 60 text

© 2022 for LANCERS, Inc. All Rights Reserved 60 情報損失する分解の例

Slide 61

Slide 61 text

© 2022 for LANCERS, Inc. All Rights Reserved 61 リレーション 注文 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000

Slide 62

Slide 62 text

© 2022 for LANCERS, Inc. All Rights Reserved 62 リレーション 注文 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 商品番号カラムの前後で 分解してみる

Slide 63

Slide 63 text

© 2022 for LANCERS, Inc. All Rights Reserved 63 リレーション 注文 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 顧客名 商品名 商品番号 A企業 テレビ 1 B企業 テレビ 1 B企業 洗濯機 2 商品番号 数量 単価 金額 1 3 200,000 600,000 1 10 200,000 2,000,000 2 5 70,000 350.000

Slide 64

Slide 64 text

© 2022 for LANCERS, Inc. All Rights Reserved 64 改めて商品番号で結合すると....? 顧客名 商品名 商品番号 A企業 テレビ 1 B企業 テレビ 1 B企業 洗濯機 2 商品番号 数量 単価 金額 1 3 200,000 600,000 1 10 200,000 2,000,000 2 5 70,000 350.000

Slide 65

Slide 65 text

© 2022 for LANCERS, Inc. All Rights Reserved 65 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 A企業 テレビ 1 10 200,000 2,000,000 B企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 顧客名 商品名 商品番号 A企業 テレビ 1 B企業 テレビ 1 B企業 洗濯機 2 商品番号 数量 単価 金額 1 3 200,000 600,000 1 10 200,000 2,000,000 2 5 70,000 350.000

Slide 66

Slide 66 text

© 2022 for LANCERS, Inc. All Rights Reserved 66 リレーション 注文 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 ※元のリレーション

Slide 67

Slide 67 text

© 2022 for LANCERS, Inc. All Rights Reserved 67 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 A企業 テレビ 1 10 200,000 2,000,000 B企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 顧客名 商品名 商品番号 A企業 テレビ 1 B企業 テレビ 1 B企業 洗濯機 2 商品番号 数量 単価 金額 1 3 200,000 600,000 1 10 200,000 2,000,000 2 5 70,000 350.000 余計な行が増えてしまった

Slide 68

Slide 68 text

© 2022 for LANCERS, Inc. All Rights Reserved 68 ● 更新時異状を避けるためには、各事象ごとに分解すれば良い →各事象ごとにひたすら分解すればOK?  情報無損失分解 が理想的である →「各事象ごとに分解」は人によって解釈が違ったりしない?

Slide 69

Slide 69 text

© 2022 for LANCERS, Inc. All Rights Reserved 69 ● 更新時異状を避けるためには、各事象ごとに分解すれば良い →各事象ごとにひたすら分解すればOK?  情報無損失分解 が理想的である →「各事象ごとに分解」は人によって解釈が違ったりしない?

Slide 70

Slide 70 text

© 2022 for LANCERS, Inc. All Rights Reserved 70 「各事象ごとの分解」の定式化

Slide 71

Slide 71 text

© 2022 for LANCERS, Inc. All Rights Reserved 71 ● リレーションの属性名の集合A,Bに対して関数従属性A→Bが存在すると は次を満たすことをいう ○ リレーションの任意の行 t と sに対して tのAの値とsのAの値が一致すれば、 tのBの値とsのBの値が一致する → Aの値が決まれば、Bの値が一意に定まる 関数従属性とは

Slide 72

Slide 72 text

© 2022 for LANCERS, Inc. All Rights Reserved 72 姓名 年齢 生年月日 住所 個人番号 星座 性別 郵便番号

Slide 73

Slide 73 text

© 2022 for LANCERS, Inc. All Rights Reserved 73 姓名 年齢 生年月日 住所 個人番号 星座 性別 郵便番号

Slide 74

Slide 74 text

© 2022 for LANCERS, Inc. All Rights Reserved 74 姓名 年齢 生年月日 個人番号 星座 生年月日が決まれば 年齢と星座が決まる 例えば、2000年1月1日生まれなら ば22歳で山羊座であることが自動 的にわかる →年齢と星座は生年月日に  関連する事象

Slide 75

Slide 75 text

© 2022 for LANCERS, Inc. All Rights Reserved 75 「各事象ごとの分解」 関数従属性

Slide 76

Slide 76 text

© 2022 for LANCERS, Inc. All Rights Reserved 76 ● リレーションR(A,B,C)の属性名の集合A,Bに対して 関数従属性A→Bが存在したとする。 このとき、関数従属性に沿って分解するとはリレーションRを  A,Bの属性を持つリレーションR1(A,B)  A,Cの属性を持つリレーションR2(A,C) に分解することとする 関数従属性に沿った分解とは

Slide 77

Slide 77 text

© 2022 for LANCERS, Inc. All Rights Reserved 77 個人番号 姓名 年齢 住所 生年月日 性別 郵便番号 星座 00001 山田太郎 26 東京都 墨田区 押上1丁目 1−2 1996/01/01 男 1310045 山羊座 00002 田中花子 22 東京都 港区 芝公園4丁目 2−8 2000/01/01 女 1050011 山羊座

Slide 78

Slide 78 text

© 2022 for LANCERS, Inc. All Rights Reserved 78 個人番号 姓名 年齢 住所 生年月日 性別 郵便番号 星座 00001 山田太郎 26 東京都 墨田区 押上1丁目 1−2 1996/01/01 男 1310045 山羊座 00002 田中花子 22 東京都 港区 芝公園4丁目 2−8 2000/01/01 女 1050011 山羊座

Slide 79

Slide 79 text

© 2022 for LANCERS, Inc. All Rights Reserved 79 個人番号 姓名 住所 生年月日 性別 郵便番号 00001 山田太郎 東京都 墨田区 押上1丁目 1−2 1996/01/01 男 1310045 00002 田中花子 東京都 港区 芝公園4丁目 2−8 2000/01/01 女 1050011 生年月日 年齢 星座 1996/01/01 26 山羊座 2000/01/01 22 山羊座

Slide 80

Slide 80 text

© 2022 for LANCERS, Inc. All Rights Reserved 80 「各事象ごとの分解」 関数従属性に沿った分解

Slide 81

Slide 81 text

© 2022 for LANCERS, Inc. All Rights Reserved 81 ● 更新時異状を避けるためには、各事象ごとに分解すれば良い →各事象ごとにひたすら分解すればOK?  情報無損失分解 が理想的である →「各事象ごとに分解」は人によって解釈が違ったりしない?  リレーション内の関数従属性に沿って分解すれば良い

Slide 82

Slide 82 text

© 2022 for LANCERS, Inc. All Rights Reserved 82 ● 更新時異状を避けるためには、各事象ごとに分解すれば良い →各事象ごとにひたすら分解すればOK?  情報無損失分解 が理想的である →「各事象ごとに分解」は人によって解釈が違ったりしない?  リレーション内の関数従属性に沿って分解すれば良い

Slide 83

Slide 83 text

© 2022 for LANCERS, Inc. All Rights Reserved 83 関数従属性に沿った分解が 情報無損失分解かいちいち確認するの?

Slide 84

Slide 84 text

© 2022 for LANCERS, Inc. All Rights Reserved 84 ● 実は関数従属性に沿った分解は必ず情報無損失分解となっていることが 知られている ● 情報無損失分解の存在と多値従属性の存在が同値であることと 関数従属性が多値従属性の特別な場合であることから従う ● つまりリレーション内の関数従属性に沿って、適切に分解をしていけばよ い →これが第2正規化・第3正規化のはじまり

Slide 85

Slide 85 text

第2正規化


Slide 86

Slide 86 text

© 2022 for LANCERS, Inc. All Rights Reserved 86 関数従属性見つけて ひたすら分解していけばいいのでは?

Slide 87

Slide 87 text

© 2022 for LANCERS, Inc. All Rights Reserved 87 ● リレーションRがR1とR2に分解されたとする。 以下を満たす時、その分解が関数従属性保存であるという ○ R1とR2に存在する関数従属性を組み合わせると Rの全ての関数従属性を表現できる → 関数従属性が失われない分解であること  (カラム同士の関係性や意味が引き継がれていること) 関数従属性保存

Slide 88

Slide 88 text

© 2022 for LANCERS, Inc. All Rights Reserved 88 関数従属性保存でなくなる分解例

Slide 89

Slide 89 text

© 2022 for LANCERS, Inc. All Rights Reserved 89 学籍番号 学生名 受講科目 担当教員 教員番号 100 田中 世界史 浜田 A1 100 田中 数学 松本 B2 101 遠藤 数学 松本 B2 102 山﨑 数学 松本 B2 102 山﨑 世界史 浜田 A1 リレーション 受講 ※以下の関数従属性が存在しているとする ・学籍番号→学生名    ・受講科目→担当教員  ・受講科目 →教員番号 ・担当教員→教員番号  ・教員番号 →担当教員

Slide 90

Slide 90 text

© 2022 for LANCERS, Inc. All Rights Reserved 90 学籍番号 学生名 受講科目 担当教員 教員番号 100 田中 世界史 浜田 A1 100 田中 数学 松本 B2 101 遠藤 数学 松本 B2 102 山﨑 数学 松本 B2 102 山﨑 世界史 浜田 A1 リレーション 受講 この関数従属性にそって分解すると.....

Slide 91

Slide 91 text

© 2022 for LANCERS, Inc. All Rights Reserved 91 学籍番号 学生名 受講科目 教員番号 100 田中 世界史 A1 100 田中 数学 B2 101 遠藤 数学 B2 102 山﨑 数学 B2 102 山﨑 世界史 A1 受講科目 担当教員 世界史 浜田 数学 松本

Slide 92

Slide 92 text

© 2022 for LANCERS, Inc. All Rights Reserved 92 学籍番号 学生名 受講科目 教員番号 100 田中 世界史 A1 100 田中 数学 B2 101 遠藤 数学 B2 102 山﨑 数学 B2 102 山﨑 世界史 A1 受講科目 担当教員 世界史 浜田 数学 松本 関数従属性を一つずつ確認すると.....

Slide 93

Slide 93 text

© 2022 for LANCERS, Inc. All Rights Reserved 93 学籍番号 学生名 受講科目 教員番号 100 田中 世界史 A1 100 田中 数学 B2 101 遠藤 数学 B2 102 山﨑 数学 B2 102 山﨑 世界史 A1 受講科目 担当教員 世界史 浜田 数学 松本 学籍番号→学生名

Slide 94

Slide 94 text

© 2022 for LANCERS, Inc. All Rights Reserved 94 学籍番号 学生名 受講科目 教員番号 100 田中 世界史 A1 100 田中 数学 B2 101 遠藤 数学 B2 102 山﨑 数学 B2 102 山﨑 世界史 A1 受講科目 担当教員 世界史 浜田 数学 松本 受講科目→教員番号

Slide 95

Slide 95 text

© 2022 for LANCERS, Inc. All Rights Reserved 95 学籍番号 学生名 受講科目 教員番号 100 田中 世界史 A1 100 田中 数学 B2 101 遠藤 数学 B2 102 山﨑 数学 B2 102 山﨑 世界史 A1 受講科目 担当教員 世界史 浜田 数学 松本 受講科目→担当教員

Slide 96

Slide 96 text

© 2022 for LANCERS, Inc. All Rights Reserved 96 学籍番号 学生名 受講科目 教員番号 100 田中 世界史 A1 100 田中 数学 B2 101 遠藤 数学 B2 102 山﨑 数学 B2 102 山﨑 世界史 A1 受講科目 担当教員 世界史 浜田 数学 松本 教員番号と担当教員の間の関数従属性が消えている

Slide 97

Slide 97 text

© 2022 for LANCERS, Inc. All Rights Reserved 97 なぜこのようなことが起こったか

Slide 98

Slide 98 text

© 2022 for LANCERS, Inc. All Rights Reserved 98 学籍番号 学生名 受講科目 担当教員 教員番号 100 田中 世界史 浜田 A1 100 田中 数学 松本 B2 101 遠藤 数学 松本 B2 102 山﨑 数学 松本 B2 102 山﨑 世界史 浜田 A1 リレーション 受講 受講科目→担当教員に沿った分解は....

Slide 99

Slide 99 text

© 2022 for LANCERS, Inc. All Rights Reserved 99 学籍番号 学生名 受講科目 担当教員 教員番号 100 田中 世界史 浜田 A1 100 田中 数学 松本 B2 101 遠藤 数学 松本 B2 102 山﨑 数学 松本 B2 102 山﨑 世界史 浜田 A1 リレーション 受講 担当教員→教員番号の関数従属性の 情報が漏れてしまっている

Slide 100

Slide 100 text

© 2022 for LANCERS, Inc. All Rights Reserved 100 学籍番号 学生名 受講科目 担当教員 教員番号 100 田中 世界史 浜田 A1 100 田中 数学 松本 B2 101 遠藤 数学 松本 B2 102 山﨑 数学 松本 B2 102 山﨑 世界史 浜田 A1 リレーション 受講 受講科目→(担当教員,教員番号) に沿って分解するべき

Slide 101

Slide 101 text

© 2022 for LANCERS, Inc. All Rights Reserved 101 学籍番号 学生名 受講科目 担当教員 教員番号 100 田中 世界史 浜田 A1 100 田中 数学 松本 B2 101 遠藤 数学 松本 B2 102 山﨑 数学 松本 B2 102 山﨑 世界史 浜田 A1 リレーション 受講 もしくは担当教員→教員番号に沿って分 解するべき

Slide 102

Slide 102 text

© 2022 for LANCERS, Inc. All Rights Reserved 102 関数従属性の漏れがないように 分解していく必要がある

Slide 103

Slide 103 text

© 2022 for LANCERS, Inc. All Rights Reserved 103 ● 関数従属性保存を満たすために 各正規化の手順に沿って順番に分解していくべき ○ 候補キーに直接的に関連した属性集合の 関数従属性に沿って分解する(第2正規化) ○ 候補キーに間接的に関連した属性集合の 関数従属性に沿って分解する(第3正規化) 関数従属性保存

Slide 104

Slide 104 text

© 2022 for LANCERS, Inc. All Rights Reserved 104 ● リレーションRが第2正規形であるとは次を満たすことをいう ○ Rが第1正規形である →値が全て単一であること ○ Rの全ての非キー属性が各候補キーに対し完全関数従属している →候補キーの一部から非キー属性への関数従属性が存在しない 第2正規形

Slide 105

Slide 105 text

© 2022 for LANCERS, Inc. All Rights Reserved 105 ● 関数従属性A→Bが存在し、Aのいかなる真部分集合A’に対しても 関数従属性A’→Bが成り立たない時、 BはAに完全関数従属しているという → Aから属性を一つでも取り除いてしまうと、  関数従属性が失われてしまうということ   完全関数従属

Slide 106

Slide 106 text

© 2022 for LANCERS, Inc. All Rights Reserved 106 第2正規形でない例

Slide 107

Slide 107 text

© 2022 for LANCERS, Inc. All Rights Reserved 107 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 リレーション 注文 ※以下の関数従属性が存在しているとする ・商品番号→商品名   ・商品名 →商品番号 ・商品番号→単価    ・数量&単価 →金額 ・顧客&商品番号→数量

Slide 108

Slide 108 text

© 2022 for LANCERS, Inc. All Rights Reserved 108 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 リレーション 注文 候補キー

Slide 109

Slide 109 text

© 2022 for LANCERS, Inc. All Rights Reserved 109 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 リレーション 注文 非キー属性

Slide 110

Slide 110 text

© 2022 for LANCERS, Inc. All Rights Reserved 110 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 リレーション 注文 候補キーが各非キー属性に対して 完全関数従属しているかを調べていく →候補キーの一部から非キー属性への関数従属性  が存在するかを調べる

Slide 111

Slide 111 text

© 2022 for LANCERS, Inc. All Rights Reserved 111 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 「金額」は候補キーの片方だけでは決まらない

Slide 112

Slide 112 text

© 2022 for LANCERS, Inc. All Rights Reserved 112 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 「金額」は候補キーの片方だけでは決まらない ※仮定されている関数従属性 ・商品番号→商品名   ・商品名 →商品番号 ・商品番号→単価    ・数量&単価→金額 ・顧客&商品番号→数量

Slide 113

Slide 113 text

© 2022 for LANCERS, Inc. All Rights Reserved 113 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 「数量」は候補キーの片方だけでは決まらない

Slide 114

Slide 114 text

© 2022 for LANCERS, Inc. All Rights Reserved 114 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 「数量」は候補キーの片方だけでは決まらない ※仮定されている関数従属性 ・商品番号→商品名   ・商品名 →商品番号 ・商品番号→単価    ・数量&単価 →金額 ・顧客&商品番号→数量

Slide 115

Slide 115 text

© 2022 for LANCERS, Inc. All Rights Reserved 115 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 「商品名」と「単価」は候補キーの片方だけで決まる

Slide 116

Slide 116 text

© 2022 for LANCERS, Inc. All Rights Reserved 116 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 「商品名」と「単価」は候補キーの片方だけで決まる ※仮定されている関数従属性 ・商品番号→商品名   ・商品名→商品番号 ・商品番号→単価    ・数量&単価→金額 ・顧客&商品番号→数量

Slide 117

Slide 117 text

© 2022 for LANCERS, Inc. All Rights Reserved 117 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 (顧客名,商品番号)→(商品名,単価)の関数従属性に対し     商品番号→(商品名,単価)の関数従属性も成り立つので (顧客名,商品番号)は(商品名,単価)に完全関数従属していない

Slide 118

Slide 118 text

© 2022 for LANCERS, Inc. All Rights Reserved 118 第2正規形でないことは分かったが どのように分解して第2正規形にするか

Slide 119

Slide 119 text

© 2022 for LANCERS, Inc. All Rights Reserved 119 第2正規形にならなかった原因となる 関数従属性に沿って分解する

Slide 120

Slide 120 text

© 2022 for LANCERS, Inc. All Rights Reserved 120 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 (顧客名,商品番号)→(商品名,単価)の関数従属性に対し     商品番号→(商品名,単価)の関数従属性も成り立つので (顧客名,商品番号)は(商品名,単価)に完全関数従属していない

Slide 121

Slide 121 text

© 2022 for LANCERS, Inc. All Rights Reserved 121 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 (顧客名,商品番号)→(商品名,単価)の関数従属性に対し     商品番号→(商品名,単価)の関数従属性も成り立つので (顧客名,商品番号)は(商品名,単価)に完全関数従属していない

Slide 122

Slide 122 text

© 2022 for LANCERS, Inc. All Rights Reserved 122 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 (顧客名,商品番号)→(商品名,単価)の関数従属性に対し     商品番号→(商品名,単価)の関数従属性も成り立つので (顧客名,商品番号)は(商品名,単価)に完全関数従属していない 部分関数従属性

Slide 123

Slide 123 text

© 2022 for LANCERS, Inc. All Rights Reserved 123 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000

Slide 124

Slide 124 text

© 2022 for LANCERS, Inc. All Rights Reserved 124 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 顧客名 商品番号 数量 金額 A企業 1 3 600,000 B企業 1 10 2,000,000 B企業 2 5 350.000 商品番号 商品名 単価 1 テレビ 200,000 2 洗濯機 70,000

Slide 125

Slide 125 text

© 2022 for LANCERS, Inc. All Rights Reserved 125 顧客名 商品名 商品番号 数量 単価 金額 A企業 テレビ 1 3 200,000 600,000 B企業 テレビ 1 10 200,000 2,000,000 B企業 洗濯機 2 5 70,000 350.000 顧客名 商品番号 数量 金額 A企業 1 3 600,000 B企業 1 10 2,000,000 B企業 2 5 350.000 商品番号 商品名 単価 1 テレビ 200,000 2 洗濯機 70,000 第2正規化

Slide 126

Slide 126 text

© 2022 for LANCERS, Inc. All Rights Reserved 126 この第2正規化の分解は以下を満たすことが確認できる ● 序盤で述べたような更新時異状は起こらないこと ● 情報無損失分解になっていること ● 関数従属性保存になっていること

Slide 127

Slide 127 text

最後に


Slide 128

Slide 128 text

© 2022 for LANCERS, Inc. All Rights Reserved 128 ● 第1正規化とは、複雑性の回避のためにカラムの値を単一の値になるよ に修正すること ● リレーションの理想的な分解は、 情報無損失分解であり関数従属性保存であること ● 関数従属性に沿って分解すれば情報無損失分解になる ● 第2正規化は、部分関数従属性に沿って分解することであり、 それは関数従属性保存となっている 今日持ち帰っていただきたいこと

Slide 129

Slide 129 text

© 2022 for LANCERS, Inc. All Rights Reserved 129 129 参考文献 ・増永 良文. リレーショナルデータベース入門[第3版] . サイエンス 社, 2017 ・R. Elmasri and S. B. Navathe. Fundamentals of Database Systems. Addison-Wesley, 2000

Slide 130

Slide 130 text

© 2022 for LANCERS, Inc. All Rights Reserved 130 ありがとうございました!