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