$30 off During Our Annual Pro Sale. View Details »

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

kubo ayumu
September 15, 2022

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

kubo ayumu

September 15, 2022
Tweet

More Decks by kubo ayumu

Other Decks in Programming

Transcript

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


  2. © 2022 for LANCERS, Inc. All Rights Reserved 2 2

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

  4. © 2022 for LANCERS, Inc. All Rights Reserved 4 前の僕「なんかいい具合に

    テーブル分割することよね」
  5. © 2022 for LANCERS, Inc. All Rights Reserved 5 5

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

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

    1 RDBにおける用語の整理 2 第1正規化 3 理想的な分解 4 第2正規化 5 最後に アジェンダ
  8. RDBにおける用語の整理


  9. © 2022 for LANCERS, Inc. All Rights Reserved 9 •

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

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

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

    を考えてみよう
  17. © 2022 for LANCERS, Inc. All Rights Reserved 17

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

  19. © 2022 for LANCERS, Inc. All Rights Reserved 19 姓名

    年齢 生年月日 住所 個人番号 星座 性別 郵便番号
  20. © 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 山羊座 各ドメインを組み合わせてリレーション「日本人」が作れる
  21. © 2022 for LANCERS, Inc. All Rights Reserved 21 行(1人の人間)を一意に特定できる属性はどれでしょうか?

  22. © 2022 for LANCERS, Inc. All Rights Reserved 22 姓名

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

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

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

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

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

    年齢 生年月日 住所 個人番号 性別 星座 個人番号だけで行を特定できるので(年 齢,個人番号)は候補キーではない! →候補キーは行を特定できる属性の   極小の組み合わせ
  28. 第1正規化


  29. © 2022 for LANCERS, Inc. All Rights Reserved 29 •

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

    リレーションの例
  31. © 2022 for LANCERS, Inc. All Rights Reserved 31 社員番号

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

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

  34. © 2022 for LANCERS, Inc. All Rights Reserved 34 社員番号

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

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

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

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

  39. © 2022 for LANCERS, Inc. All Rights Reserved 39 社員番号

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

    各カラムの値が複数の値の集まりなどではなく常に単一の値であるリレー ションを第1正規形であるという • 第1正規形の条件を満たすように リレーションを修正することを第1正規化という • 複雑性の回避のために第1正規化のステップが必要 第1正規形とは
  41. 理想的な分解


  42. © 2022 for LANCERS, Inc. All Rights Reserved 42 第2正規化の紹介の前に

    リレーションをどのように分解するのが 理想かを追ってみる
  43. © 2022 for LANCERS, Inc. All Rights Reserved 43 そもそも

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

    更新時異状とは行を更新・挿入する際に起こる不都合な状況を指す ◦ タプル挿入時異状 ◦ タプル削除時異状 ◦ タプル修正時異状 更新時異状
  45. © 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 リレーション 注文
  46. © 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行分更新する必要がある リレーション 注文
  47. © 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行分更新する必要がある リレーション 注文
  48. © 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 - 掃除機を新たに売り出すことになったので 以下のようなレコードを追加したい
  49. © 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 - 主キー
  50. © 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を許さないので、挿入できない
  51. © 2022 for LANCERS, Inc. All Rights Reserved 51 なぜ更新時異状が起こるか

  52. © 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行分更新する必要がある リレーション 注文
  53. © 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
  54. © 2022 for LANCERS, Inc. All Rights Reserved 54 ということは

    各事象毎に分解すれば良さそう
  55. © 2022 for LANCERS, Inc. All Rights Reserved 55 しかし...不安と疑問が残る

  56. © 2022 for LANCERS, Inc. All Rights Reserved 56 •

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

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

  59. © 2022 for LANCERS, Inc. All Rights Reserved 59 •

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

  61. © 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
  62. © 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 商品番号カラムの前後で 分解してみる
  63. © 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
  64. © 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
  65. © 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
  66. © 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 ※元のリレーション
  67. © 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 余計な行が増えてしまった
  68. © 2022 for LANCERS, Inc. All Rights Reserved 68 •

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

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

  71. © 2022 for LANCERS, Inc. All Rights Reserved 71 •

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

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

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

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

    関数従属性
  76. © 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) に分解することとする 関数従属性に沿った分解とは
  77. © 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 山羊座
  78. © 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 山羊座
  79. © 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 山羊座
  80. © 2022 for LANCERS, Inc. All Rights Reserved 80 「各事象ごとの分解」

    関数従属性に沿った分解
  81. © 2022 for LANCERS, Inc. All Rights Reserved 81 •

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

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

    情報無損失分解かいちいち確認するの?
  84. © 2022 for LANCERS, Inc. All Rights Reserved 84 •

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


  86. © 2022 for LANCERS, Inc. All Rights Reserved 86 関数従属性見つけて

    ひたすら分解していけばいいのでは?
  87. © 2022 for LANCERS, Inc. All Rights Reserved 87 •

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

  89. © 2022 for LANCERS, Inc. All Rights Reserved 89 学籍番号

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

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

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

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

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

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

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

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

  98. © 2022 for LANCERS, Inc. All Rights Reserved 98 学籍番号

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

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

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

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

    分解していく必要がある
  103. © 2022 for LANCERS, Inc. All Rights Reserved 103 •

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

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

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

  107. © 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 リレーション 注文 ※以下の関数従属性が存在しているとする ・商品番号→商品名   ・商品名 →商品番号 ・商品番号→単価    ・数量&単価 →金額 ・顧客&商品番号→数量
  108. © 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 リレーション 注文 候補キー
  109. © 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 リレーション 注文 非キー属性
  110. © 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 リレーション 注文 候補キーが各非キー属性に対して 完全関数従属しているかを調べていく →候補キーの一部から非キー属性への関数従属性  が存在するかを調べる
  111. © 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 「金額」は候補キーの片方だけでは決まらない
  112. © 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 「金額」は候補キーの片方だけでは決まらない ※仮定されている関数従属性 ・商品番号→商品名   ・商品名 →商品番号 ・商品番号→単価    ・数量&単価→金額 ・顧客&商品番号→数量
  113. © 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 「数量」は候補キーの片方だけでは決まらない
  114. © 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 「数量」は候補キーの片方だけでは決まらない ※仮定されている関数従属性 ・商品番号→商品名   ・商品名 →商品番号 ・商品番号→単価    ・数量&単価 →金額 ・顧客&商品番号→数量
  115. © 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 「商品名」と「単価」は候補キーの片方だけで決まる
  116. © 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 「商品名」と「単価」は候補キーの片方だけで決まる ※仮定されている関数従属性 ・商品番号→商品名   ・商品名→商品番号 ・商品番号→単価    ・数量&単価→金額 ・顧客&商品番号→数量
  117. © 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 (顧客名,商品番号)→(商品名,単価)の関数従属性に対し     商品番号→(商品名,単価)の関数従属性も成り立つので (顧客名,商品番号)は(商品名,単価)に完全関数従属していない
  118. © 2022 for LANCERS, Inc. All Rights Reserved 118 第2正規形でないことは分かったが

    どのように分解して第2正規形にするか
  119. © 2022 for LANCERS, Inc. All Rights Reserved 119 第2正規形にならなかった原因となる

    関数従属性に沿って分解する
  120. © 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 (顧客名,商品番号)→(商品名,単価)の関数従属性に対し     商品番号→(商品名,単価)の関数従属性も成り立つので (顧客名,商品番号)は(商品名,単価)に完全関数従属していない
  121. © 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 (顧客名,商品番号)→(商品名,単価)の関数従属性に対し     商品番号→(商品名,単価)の関数従属性も成り立つので (顧客名,商品番号)は(商品名,単価)に完全関数従属していない
  122. © 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 (顧客名,商品番号)→(商品名,単価)の関数従属性に対し     商品番号→(商品名,単価)の関数従属性も成り立つので (顧客名,商品番号)は(商品名,単価)に完全関数従属していない 部分関数従属性
  123. © 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
  124. © 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
  125. © 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正規化
  126. © 2022 for LANCERS, Inc. All Rights Reserved 126 この第2正規化の分解は以下を満たすことが確認できる

    • 序盤で述べたような更新時異状は起こらないこと • 情報無損失分解になっていること • 関数従属性保存になっていること
  127. 最後に


  128. © 2022 for LANCERS, Inc. All Rights Reserved 128 •

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

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