Slide 1

Slide 1 text

RDBにおける候補キーを
 求めるためのアルゴリズム


Slide 2

Slide 2 text

© 2022 for LANCERS, Inc. All Rights Reserved 2 2 久保 路(くぼ あゆむ) ・ 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 3 今日持ち帰っていただきたいこと ・候補キーとは一体何か ・候補キーを見つけることはなぜ重要なのか ・候補キーを求めるためのアルゴリズムはどのようなものか ・なんか面白そうという気持ち

Slide 4

Slide 4 text

© 2022 for LANCERS, Inc. All Rights Reserved 4 4 1 RDBにおける用語の整理 2 候補キーを求めるためのアルゴリズム 3 アルゴリズムの例 4 最後に アジェンダ

Slide 5

Slide 5 text

RDBにおける用語の整理


Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

© 2022 for LANCERS, Inc. All Rights Reserved 14

Slide 15

Slide 15 text

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

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

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 姓名 年齢 生年月日 住所 個人番号 性別 星座 郵便番号

Slide 21

Slide 21 text

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

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 姓名 年齢 住所 星座 性別 郵便番号 郵便番号を特定するのは 住所だけで十分 →郵便番号はこのリレーション  でわざわざ持つ必要がない

Slide 26

Slide 26 text

© 2022 for LANCERS, Inc. All Rights Reserved 26 姓名 年齢 住所 星座 性別 郵便番号 郵便番号を特定するのは 住所だけで十分 →郵便番号はこのリレーション  でわざわざ持つ必要がない →別のリレーションに  情報を持たせる(正規化)

Slide 27

Slide 27 text

© 2022 for LANCERS, Inc. All Rights Reserved 27 ● 候補キーは行を一意に特定するキー ● 正規化する上で候補キーを主軸に考慮する必要がある ● そのため、候補キーが何であるかを特定することは重要

Slide 28

Slide 28 text

候補キーを求めるための
 アルゴリズム


Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

© 2022 for LANCERS, Inc. All Rights Reserved 34 ● リレーションの属性名の集合Xの閉包X+とは次のような集合である ○ Xが決定項となる全ての関数従属性の 被決定項からなる属性名の集合 属性集合の閉包とは

Slide 35

Slide 35 text

© 2022 for LANCERS, Inc. All Rights Reserved 35 ● リレーションの属性名の集合Xの閉包X+とは次のような集合である ○ Xが決定項となる全ての関数従属性の 被決定項からなる属性名の集合 → Xを決めれば一意に定まる全ての属性名の集合 属性集合の閉包とは

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

© 2022 for LANCERS, Inc. All Rights Reserved 40 ここで候補キーを閉包を使った 書き方に直してみる

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

© 2022 for LANCERS, Inc. All Rights Reserved 42 お待たせしました アルゴリズムを紹介します

Slide 43

Slide 43 text

© 2022 for LANCERS, Inc. All Rights Reserved 43 1. K を 属性全体の集合 とおく 2. Kの各属性Aに対して以下を実行する {K - A}+が属性全体の集合となればK を K - A で置き換える そうでなければ、Kをそのままとする 3. 最終的に残ったKが候補キーとなる 候補キーを1つ求めるためのアルゴリズム

Slide 44

Slide 44 text

アルゴリズムの例


Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

© 2022 for LANCERS, Inc. All Rights Reserved 46 ● 住所が分かれば、郵便番号が分かる ● 生年月日が分かれば、年齢・星座が分かる ● 姓名・住所が分かれば、個人番号が分かる ● 個人番号が分かれば、生年月日・性別・姓名・住所が分かる 以下を既知として、候補キーを見つける

Slide 47

Slide 47 text

© 2022 for LANCERS, Inc. All Rights Reserved 47 1. K を 属性全体の集合 とおく 2. Kの各属性Aに対して以下を実行する {K - A}+が属性全体の集合となればK を K - A で置き換える そうでなければ、Kをそのままとする 3. 最終的に残ったKが候補キーとなる 候補キーを1つ求めるためのアルゴリズム(再掲)

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

© 2022 for LANCERS, Inc. All Rights Reserved 49 1. K を 属性全体の集合 とおく 2. Kの各属性Aに対して以下を実行する {K - A}+が属性全体の集合となればK を K - A で置き換える そうでなければ、Kをそのままとする 3. 最終的に残ったKが候補キーとなる 候補キーを1つ求めるためのアルゴリズム(再掲)

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

© 2022 for LANCERS, Inc. All Rights Reserved 52 姓名 年齢 生年月日 住所 個人番号 星座 性別 郵便番号 {K-A}+

Slide 53

Slide 53 text

© 2022 for LANCERS, Inc. All Rights Reserved 53 {K-A}+が全属性集合になる!

Slide 54

Slide 54 text

© 2022 for LANCERS, Inc. All Rights Reserved 54 1. K を 属性全体の集合 とおく 2. Kの各属性Aに対して以下を実行する {K - A}+が属性全体の集合となればK を K - A で置き換える そうでなければ、Kをそのままとする 3. 最終的に残ったKが候補キーとなる 候補キーを1つ求めるためのアルゴリズム(再掲)

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

© 2022 for LANCERS, Inc. All Rights Reserved 58 姓名 年齢 生年月日 住所 個人番号 星座 性別 郵便番号 {K-A}+

Slide 59

Slide 59 text

© 2022 for LANCERS, Inc. All Rights Reserved 59 {K-A}+が全属性集合になる!

Slide 60

Slide 60 text

© 2022 for LANCERS, Inc. All Rights Reserved 60 1. K を 属性全体の集合 とおく 2. Kの各属性Aに対して以下を実行する {K - A}+が属性全体の集合となればK を K - A で置き換える そうでなければ、Kをそのままとする 3. 最終的に残ったKが候補キーとなる 候補キーを1つ求めるためのアルゴリズム(再掲)

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

© 2022 for LANCERS, Inc. All Rights Reserved 62 繰り返し.....

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

© 2022 for LANCERS, Inc. All Rights Reserved 66 姓名 年齢 生年月日 住所 個人番号 星座 性別 郵便番号 {K-A}+

Slide 67

Slide 67 text

© 2022 for LANCERS, Inc. All Rights Reserved 67 {K-A}+が全属性集合にならない!

Slide 68

Slide 68 text

© 2022 for LANCERS, Inc. All Rights Reserved 68 1. K を 属性全体の集合 とおく 2. Kの各属性Aに対して以下を実行する {K - A}+が属性全体の集合となればK を K - A で置き換える そうでなければ、Kをそのままとする 3. 最終的に残ったKが候補キーとなる 候補キーを1つ求めるためのアルゴリズム(再掲)

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

© 2022 for LANCERS, Inc. All Rights Reserved 73 {K-A}+が全属性集合にならない!

Slide 74

Slide 74 text

© 2022 for LANCERS, Inc. All Rights Reserved 74 1. K を 属性全体の集合 とおく 2. Kの各属性Aに対して以下を実行する {K - A}+が属性全体の集合となればK を K - A で置き換える そうでなければ、Kをそのままとする 3. 最終的に残ったKが候補キーとなる 候補キーを1つ求めるためのアルゴリズム(再掲)

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

© 2022 for LANCERS, Inc. All Rights Reserved 76 1. K を 属性全体の集合 とおく 2. Kの各属性Aに対して以下を実行する {K - A}+が属性全体の集合となればK を K - A で置き換える そうでなければ、Kをそのままとする 3. 最終的に残ったKが候補キーとなる 候補キーを1つ求めるためのアルゴリズム(再掲)

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

© 2022 for LANCERS, Inc. All Rights Reserved 78 ● 属性の選び方によって見つかる候補キーは異なる ● 属性の数をN、関数従属性の数をPとすると、 閉包を求める計算はN×Pのオーダーの時間計算量となる ● 候補キーの計算は結局、各属性に対して閉包を求めることになる ので、(N^2)×Pのオーダーの時間計算量となる

Slide 79

Slide 79 text

最後に


Slide 80

Slide 80 text

© 2022 for LANCERS, Inc. All Rights Reserved 80 80 今日持ち帰っていただきたいこと ・候補キーとは一体何か  →行を一意に特定する極小のキー ・候補キーを見つけることはなぜ重要なのか  →正規化において主軸となる要素のため ・候補キーを求めるためのアルゴリズムはどのようなものか  →全属性集合から各属性を順に取り除いて閉包を計算し   それが全属性集合と一致するかを判定する ・なんか面白そうという気持ち→どうでしたか

Slide 81

Slide 81 text

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

Slide 82

Slide 82 text

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

Slide 83

Slide 83 text

© 2022 for LANCERS, Inc. All Rights Reserved 83 1. X^0 = Xとおく 2. X^i = X^(i-1) U {X^(i-1)の要素が決定項となる全ての関数従属性の 被決定項からなる属性名の集合} 3. X^i = X^(i-1)ならX^(i-1)がXの閉包。 そうでなければ添字iの値を1つ足して、2を再度評価 閉包X+を求めるためのアルゴリズム

Slide 84

Slide 84 text

© 2022 for LANCERS, Inc. All Rights Reserved 84 ● リレーショナルデータベースの略 ● リレーショナルデータモデルに基づいて実装されたDB それを管理するシステムがRDBMS ● 例 ○ MySQL ○ SQL Server ○ Oracle ○ etc.. RDBとは

Slide 85

Slide 85 text

© 2022 for LANCERS, Inc. All Rights Reserved 85 ● 集合(重複のない要素の集まり)を指す ● 例 ○ 人名の集合 D_name = {太郎,花子,二郎,....} ○ 自然数の集合 D_natural = {1,2,3,4,5,...} ○ 都道府県の集合 D_pref = {北海道,青森県,...} ○ etc.. ドメインとは

Slide 86

Slide 86 text

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