“Closure of a Set of Attributes”とは?

Closure of a Set of Attributes

リレーショナルデータベースの勉強をしていて、壁にぶつかりました。

目次

“Closure” of a set of attributeって…?

Closure =「閉包」

Closure of a set of attribute =「属性の集合の閉鎖・閉包・クロージャ」

「閉包」って何…?”Closure”って、一般的・概念的な単語すぎて具体的にわからない。

A+とかA→Bってどういう意味?

「閉包テーブル」と「Closure of a set of attribute」はまた違うのかな…?

疑問を1つ1つ解消し、解説していきます。

以下のサイトがとても参考になりました。

Vertabelo Data Modeler
How To Find the Closure of a Set of Attributes (With Examples) Finding the closure of a set of attributes is essential for database normalization. Learn how to find it with three real-world examples!

Closure of a set of attribute(属性の集合のクロージャ)とは

・リレーショナルデータベースについてのお話

・データがあるとき、項目A、B、Cの関係性についてのお話

・データベースの正規化に欠かせない視点

・「属性集合のクロージャ」はデータの関係性のこと

・試験では「関数従属性の集合がこんな感じな時、この属性集合の閉包は?」と聞かれる

属性集合のクロージャ

属性集合Xの閉包は、Xから関数的に決定できる属性の集合

Xのクロージャとは、Xの値が同じである2つのレコードがX+の値も同じであるようなすべての属性の集合のことである。

わかりやすく解説しましょう。リレーショナルデータベースでTEST_TABLEというテーブルを用意します。そしてそのテーブルにA,B,C,D,Eという5つのカラムを用意します。

「Aのクロージャ(閉包)」とは、カラムA(=X)の値が同じである2つのレコードがカラムB(= X+)の値も同じであるような全ての属性の集合のことである。

もっとシンプルに言い換えると、カラムAの値によってカラムBの値が決まるとき、カラムBは「Aのクロージャ(閉包)」です。正確に述べると、カラムA自体も「Aのクロージャ(閉包)」に含まれるので、「Aのクロージャ(閉包)」=カラムA、Bとなります。

「カラムAの値が決まればカラムBの値が決まる」を、“A→B”と表します。

「カラムAの閉包」をA+ と表します。つまり、”A→B”の関係性が判明している今、“A+ = A,B”(カラムAの閉包はカラムA、B)と表すことができます。

「カラムAの閉包」とは、「カラムAの値が決まったら付随して決まる項目」のことです。

試験問題の出題方法

上の段落にて、Aの閉包(=A+)を明らかにし、A+ ={A,B}であると判明しました。このように「カラムXの値がそのテーブルのどの項目の値を決めるか?」を明らかにしなさい、と言う出題が「Aの閉包を求めよ(= What is the closure of a set of attribute A? | What is A+?)」です。

回答の際の注意点は、「カラムAの閉包」には「カラムA自身」も含まれる点です。

クロージャの問題には、問題の対象であるデータ集合Xと、答えを出すために使う機能従属性の関係が与えられる。A→B, B→C,D, D→Eです。

具体例

Course Editions というテーブルがあるとします。このテーブルには、ある大学で教えられているコースに関する情報が含まれています。

毎年、各コースは異なる教師が教えることがあります。各教師の生年月日をデータとして持っているのでコースの開催年と生年月日の情報があれば、そのコースが教えられたときの先生の年齢がわかります。

(注意:データベースとしては悪い設計です。閉包の概念を説明するために使用しています。)

Course Editionテーブル

COURSEYEARTEACHERDATE_OF_BIRTHAGE
データベース2019A先生1974-10-1245
数学2019B先生1985-05-1734
データベース2020C先生1990-06-0930


このテーブルの機能依存関係

コース, 年度 -> 教師

コースと年が与えられれば、その年にコースを担当した教師を決定することができます。

教師 -> 生年月日

教師が与えられた場合、その教師の生年月日を決定することができる。

年、生年月日 -> 年齢

年と生年月日が与えられれば、そのコースが教えられたときの教師の年齢を決定することができます。

属性のクロージャ(閉包)

集合{year}のクロージャ(= {year}+と表示)

YEARの値が分かった時、確実にYEARはわかります(そりゃそうですよね!)。つまり、yearは{year}+の要素になります。

他はどうでしょう。教師(TEACHER)は、年とコース名がわからないと特定できないので{year}+には当たりません。そのほかの値も、YEARだけから特定できる項目はないようです。

つまり、{year}+はyearのみ。{year}+ = {year}となります。

集合{year, teacher}のクロージャ(= {year, teacher}+と表示)

次にyearとteacherのセットの閉包を考えます。まず、{year}+と同じように、{year, teacher}自体が{year, teacher}+に入ります。

yearの値は横に置き、teacherがわかればteacher -> date_of_birth。先生の名前が分かれば生年月日もわかります。したがって、date_of_birthも{year, teacher}+に含まれます。今の段階で、{year, teacher}+ = {year、teacher、date_of_birth}ですね。

また、yearとdate_of_birthからageがわかりますね。ここで、{year, teacher}+ = {year, teacher, date_of_birth, age}。

次に、yearとteacherだけだと、courseの特定はできませんね。以上より、網羅が完了しました。

{year, teacher}+ = {year, teacher, date_of_birth, age}です。

ツボは言葉と表記の意味を理解すること

いかがでしょうか、理解は深まりましたか?

筆者の意見としては、言っていることは当たり前なんだけど、その呼び方(名称)や表記方法がちょっと分かりにくいなぁというところです。

一度理解してしまえばもう迷うことはないでしょう。悩みの迷路に入ることなく、この記事で皆さんが最短ルートで理解できたらいいなぁと思っています。

CS2203を受講中の方向け!トピック完全網羅するならこちら

あわせて読みたい
CS2203 Databasesの要点完全網羅|UoPeople UoPeopleのCS2203の受講が終わりました。無事に単位も取得できたので、データベースのコースで個人的に要点だと思った部分をまとめます。 前提として、筆者はリレーショ...
Closure of a Set of Attributes

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

ピープル大学(UoPeople)でコンピューターサイエンスを学んでいます。趣味はプログラミング。

コメント

コメントする

目次