RDBおける候補キーを求めるためのアルゴリズム
by
kubo ayumu
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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 姓名 年齢 生年月日 住所 個人番号 星座 性別 郵便番号