Previous: Boyce-Codd 正規形
Up: データベースの論理設計
Next: 理論的な考察
Previous Page: Boyce-Codd 正規形
Next Page: 理論的な考察

多値従属

先にコネクション・トラップの例としてあげた次のテーブルをもう一度考えて見よう。 先には、三つのテーブルのジョインを行って、余分な情報が現れるのを見てきたが、 テーブル二つのジョインでも、やはり、同じように余分な情報が現れるのがわかる。

Orig.	科目       教員 教科書
		----------------- ---- --------------------------
		UNIX概論     丸山 プロフェッショナルUNIX
		システム管理論  丸山 スーパーユーザーの為のUNIX
		UNIX概論     植田 スーパーユーザーの為のUNIX 

A. 科目       教員   ----------------- -----   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
1995年02月10日 (金) 00時49分16秒 JST