Previous: Boyce-Codd 正規形
Up: データベースの論理設計
Next: 理論的な考察
Previous Page: Boyce-Codd 正規形
Next Page: 理論的な考察
先にコネクション・トラップの例としてあげた次のテーブルをもう一度考えて見よう。 先には、三つのテーブルのジョインを行って、余分な情報が現れるのを見てきたが、 テーブル二つのジョインでも、やはり、同じように余分な情報が現れるのがわかる。
Orig. 科目 教員 教科書 ----------------- ---- -------------------------- UNIX概論 丸山 プロフェッショナルUNIX システム管理論 丸山 スーパーユーザーの為のUNIX UNIX概論 植田 スーパーユーザーの為のUNIXA. 科目 教員 ----------------- ----- UNIX概論 丸山 システム管理論 丸山 UNIX概論 植田
B. 科目 教科書 ----------------- -------------------------- UNIX概論 プロフェッショナルUNIX システム管理論 スーパーユーザーの為のUNIX UNIX概論 スーパーユーザーの為のUNIX
C. 科目 教員 教科書 ----------------- ---- -------------------------- UNIX概論 丸山 プロフェッショナルUNIX システム管理論 丸山 スーパーユーザーの為のUNIX UNIX概論 植田 スーパーユーザーの為のUNIX * UNIX概論 丸山 スーパーユーザーの為のUNIX * UNIX概論 植田 プロフェッショナルUNIX
テーブルAとテーブルBのジョインでつくられた、テーブルCに、もとのテーブルOrigに はない、余分な情報(*を付けてある行)が現れる理由を考えてみよう。その為に は、ジョインの過程を追ってみるのが一番分かりやすい。
(1) テーブルAとテーブルBのジョインをつくるためには、まず、この二つのテーブル の直積をつくらねばならない。
テーブルA × テーブルB科目 教員 科目 教科書 ----------------- ---- ----------------- -------------------------- UNIX概論 丸山 UNIX概論 プロフェッショナルUNIX システム管理論 スーパーユーザーの為のUNIX * UNIX概論 スーパーユーザーの為のUNIX システム管理論 丸山 UNIX概論 プロフェッショナルUNIX システム管理論 スーパーユーザーの為のUNIX UNIX概論 スーパーユーザーの為のUNIX * UNIX概論 植田 UNIX概論 プロフェッショナルUNIX システム管理論 スーパーユーザーの為のUNIX UNIX概論 スーパーユーザーの為のUNIX
直積の過程を分かりやすくするために、第一正規形の形を取らず、マルチ・バリュー を許している。
(2)実際には、リレーショナル・データベースのテーブルには、マルチ・バリューは 許されないので、きちんと第一正規形に変換されなければならない
科目 教員 科目 教科書 ----------------- ---- ----------------- -------------------------- UNIX概論 丸山 UNIX概論 プロフェッショナルUNIX UNIX概論 丸山 システム管理論 スーパーユーザーの為のUNIX * UNIX概論 丸山 UNIX概論 スーパーユーザーの為のUNIX システム管理論 丸山 UNIX概論 プロフェッショナルUNIX システム管理論 丸山 システム管理論 スーパーユーザーの為のUNIX システム管理論 丸山 UNIX概論 スーパーユーザーの為のUNIX * UNIX概論 植田 UNIX概論 プロフェッショナルUNIX UNIX概論 植田 システム管理論 スーパーユーザーの為のUNIX UNIX概論 植田 UNIX概論 スーパーユーザーの為のUNIX
(3)ジョインを得るための次のステップは、こうしてえられた直積の中から、 ジョイン・キーが一致するものをセレクトすることである。ここでのジョイン・キー は、項目「科目」であるので、上の直積テーブルから、A.科目=B.科目となる行 を選び出せば次のようになる。
科目 教員 科目 教科書 ----------------- ---- ----------------- -------------------------- UNIX概論 丸山 UNIX概論 プロフェッショナルUNIX * UNIX概論 丸山 UNIX概論 スーパーユーザーの為のUNIX システム管理論 丸山 システム管理論 スーパーユーザーの為のUNIX * UNIX概論 植田 UNIX概論 プロフェッショナルUNIX UNIX概論 植田 UNIX概論 スーパーユーザーの為のUNIX
(4)最後に、ジョインに使われた項目の一方を削除すれば、出来上がりである。
科目 教員 教科書 ----------------- ----- -------------------------- UNIX概論 丸山 プロフェッショナルUNIX * UNIX概論 丸山 スーパーユーザーの為のUNIX システム管理論 丸山 スーパーユーザーの為のUNIX * UNIX概論 植田 プロフェッショナルUNIX UNIX概論 植田 スーパーユーザーの為のUNIX
ジョインに現れるノイズには、先頭に*を付けておいた。
どこからこのようなノイズが発生したかを見てみれば、直積をつくった時点であること
がわかる。この時点で、それぞれの科目について、項目「教員」と項目「教科書」との
可能な組み合わせが全て枚挙される。ところが、この例では、科目「UNIX概論」につい
ては、教員「丸山」は、教科書「プロフェッショナルUNIX」を使うが、教科書「スー
パーユーザーの為のUNIX」を使わず、同じ科目を担当する、教員「植田」は、逆に、
教科書「スーパーユーザーの為のUNIX」を使うが、教科書「プロフェッショナルUNIX」
は使わない。こうした事情が、直積では、反映されないのである。
逆に、二つのテーブルの直積によって生成される行が、ノイズとならずに、もとの
テーブルに含まれるなら、どうであろうか? この例では、同じ科目を持っても、教員
が選んだ教科書が異なっていることが、ジョインでは、反映できないことがノイズの
原因であった。もしも、一つの科目について、項目「教員」の複数の値が、一意に決定
でき、かつ、それとは全く独立に、一つの科目について、項目「教科書」の複数の値が
一意に決定できるなら事情は変わってくる。すなわち、科目「UNIX概論」については、
二人の教員{丸山、植田}が一意に対応し、同じく、科目「UNIX概論」については、
二つの教科書{プロフェッショナルUNIX、スーパーユーザーの為のUNIX}が一意に対応
する。自然な一つの解釈は、科目「UNIX概論」には、二人の先生がいるが、どちらの
先生を選んでも、教科書は二冊必要だというものである。ここで、最も大事なこと
は、項目「教員」と項目「教科書」とは、相互に独立だということである。
科目 教員 教科書 ----------------- ---- -------------------------- UNIX概論 丸山 プロフェッショナルUNIX 植田 スーパーユーザーの為のUNIX システム管理論 丸山 スーパーユーザーの為のUNIX
最初に示したテーブルは、マルチ・バリューの形をしている。教員の値の組と、教科 書の値の組とはそれぞれ独立なので、第一正規形への変換を行えば、次のようになる。
Orig. 科目 教員 教科書 ----------------- ---- -------------------------- UNIX概論 丸山 プロフェッショナルUNIX UNIX概論 丸山 スーパーユーザーの為のUNIX UNIX概論 植田 スーパーユーザーの為のUNIX UNIX概論 植田 プロフェッショナルUNIX システム管理論 丸山 スーパーユーザーの為のUNIX
このテーブルは、次の二つのテーブルA,Bに分割可能である。しかも、この二つのテー ブルのジョインは、正確に元のテーブルを再現することを確められたい。
A. 科目 教員 ----------------- ----- UNIX概論 丸山 UNIX概論 植田 システム管理論 丸山B. 科目 教科書 ----------------- -------------------------- UNIX概論 プロフェッショナルUNIX UNIX概論 スーパーユーザーの為のUNIX システム管理論 スーパーユーザーの為のUNIX
maruyama@wakhok.ac.jp