2005年度前期 IT教育基礎論特論B

第10回: 知識ベースの管理と問合せ

概要と目標

■ 概要

IT教育のための知識ベースとしてのデータベースの管理のために、 具体的なデータベースの1つとして 現在広く一般に利用されているリレーショナルデータベースを例にとり、 データベース管理システムの概要、 およびリレーショナルデータベースの基盤となる リレーショナルデータモデル、リレーショナル代数の基礎を学習する。

■ 目標

目次


講義内容

■ リレーショナルデータベースとは

リレーショナルデータベース(RDB: Relational Database)とは、 リレーショナルデータモデルに基づくデータベースであり、 現在、もっとも広く利用されているデータベースの1つである。

リレーショナルデータベースでは、 各種データをその関係に基づき、表(テーブル)として構造化する。 このテーブルに対し、リレーション代数により定義される演算に基づき、 データの登録、変更、削除、参照やデータ間の関係の抽出などの操作を 行うことができる。

一般に、このリレーショナルデータベースは、 リレーショナルデータベース管理システム (RDBMS: Relational Database Management System)により管理され、 データベースの利用者は、このデータベース管理システムを介し、 問い合わせ言語としてSQL(Structured Query Language)を利用し、 データベースにアクセスする。

■ リレーショナルデータモデル

リレーショナルデータベースの基礎とするリレーショナルデータモデルの概要を示す。

□ リレーション

リレーションとは、データとデータの関係であるが、 リレーショナルデータモデルでは、 これをドメインの直積の部分集合として定義する。

ドメイン(定義域)とは、なんらかのある基準に基づき定義されたデータの集合である。 例えば、「自然数」というドメインは、1,2,3,...をその要素としてもつ集合であり、 またロックやクラシック、R&B等を要素とする 「音楽の種類」というドメインを考えることができる。 なお、このドメインは、有限集合でも無限集合でもかまわない。

ドメインの直積とは、ドメインの各要素の ドメイン間での全組み合わせからなる集合である。 すなわち、ドメインとしてD1={1, 2}, D2={a, b, c}があった場合、 その直積D1×D2は、 以下のように6個の要素からなる集合となる。

D1×D2= {(1, a), (1, b), (1, c), (2, a), (2, b), (2, c)}

また、D1={リンゴ, ミカン, キウィ}, D2={30, 80, 100}, D3={1, 3, 5}の直積 D1×D2×D3は、 以下のように27個の要素を持つ集合となる。

D1×D2×D3 = { (リンゴ, 30, 1), (リンゴ, 30, 3), (リンゴ, 30, 5),
(リンゴ, 80, 1), (リンゴ, 80, 3), (リンゴ, 80, 5),
(リンゴ, 100, 1), (リンゴ, 100, 3), (リンゴ, 100, 5),
(ミカン, 30, 1), (ミカン, 30, 3), (ミカン, 30, 5),
(ミカン, 80, 1), (ミカン, 80, 3), (ミカン, 80, 5),
(ミカン, 100, 1), (ミカン, 100, 3), (ミカン, 100, 5),
(キウイ, 30, 1), (キウイ, 30, 3), (キウイ, 30, 5),
(キウイ, 80, 1), (キウイ, 80, 3), (キウイ, 80, 5),
(キウイ, 100, 1), (キウイ, 100, 3), (キウイ, 100, 5) }

リレーションは、以上の定義に基づくドメインの直積の 任意の有限部分集合により定義される。 例えばD1={1, 2}, D2={a, b, c}において、 R = {(1, a), (1, c), (2, b), (2, c)}は、 D1×D2における 1つのリレーションである。

同様に、D1={リンゴ, ミカン, キウィ}, D2={30, 80, 100}, D3={1, 3, 5}において、 R = { (リンゴ, 80, 1), (ミカン, 30, 5), (キウイ, 100, 3) }は、 D1×D2×D3における 1つのリレーションである。

このリレーションは、表(テーブル)の形式により表現することもできる。 例えば、 R = { (リンゴ, 80, 1), (ミカン, 30, 5), (キウイ, 100, 3) }は、 表1のように表現することができる。

表1: リレーションのテーブル表現
  リンゴ      80       1   
  ミカン      30       5   
  キウイ      100       3   

□ リレーションスキーマ

先に、D1={リンゴ, ミカン, キウィ}, D2={30, 80, 100}, D3={1, 3, 5}において、 リレーションR = { (リンゴ, 80, 1), (ミカン, 30, 5), (キウイ, 100, 3) } ⊆ D1×D2×D3を 表1に示すようにテーブルにより表現した。 実は、このリレーションは、 ある店で売られている果物の単価とその販売単位を示しているが、 このリレーションを見ただけでは、 リレーションを定義した者以外はその意味がわからない。 そこで、表2のように、リレーションの名前と、各列の名前をつけると わかりやすくなる。

表2: 果物の単価と販売単位
果物単価販売単位
  リンゴ      80       1   
  ミカン      30       5   
  キウイ      100       3   

このリレーションの名前をリレーション名もしくはテーブル名と呼び、 また、各列を属性、属性の名前を属性名もしくはカラム名と呼ぶ。

このとき、あるリレーションの構造は、 どのような属性からなるかにより定義することができる。 これをリレーションスキーマと呼ぶ。 例えば、あるリレーションR は、 属性A1, A1, ... An のからなると定義でき、 これをR ( A1, A1, ... An )と表現する。 また、このリレーションスキーマに基づき、 具体的な要素からなるテーブルをインスタンスと呼ぶ。

リレーションR が、 D1, D2, ..., Dn の 直積D1×D2×...×Dn の 部分集合であり、 そのリレーションスキーマが R ( A1, A1, ... An )であるとすると、 i 番目の属性Ai のとる値は、 Di の要素である。 すなわち、属性Ai のとるべき値のドメインが Di であるといえ、 これをDi = dom(Ai )と書く。

また、リレーションR の1つの要素をタプルt と呼び、 あるタプルt ={ a1, a2, ..., an}における属性Ai の値 ai t Ai 値と呼び、 ai = t [Ai ] と書く。

■ リレーショナル代数

リレーショナル代数とは、 リレーショナルデータモデルにより定義されるリレーションに対する 演算方法を定めた集合演算である。 これにより特定の値を参照したり、 また複数のリレーション間の関係から新たなリレーションを求めたりする ことができる。

リレーショナル代数は、一般的な集合演算により定義される 和集合演算、差集合演算、共通集合演算、直積演算の4種類の演算と、 リレーショナル代数に特有な射影演算、選択演算、結合演算、商演算の4種類の演算、 計8種類の演算により定義される。

□ 和集合演算(R S )

和両立なリレーションR , S の和集合R S は、 以下のように定義される。

R S = { t | t R t S }

ここでいう和両立とは、 リレーションR (A1, A2, ..., Am)および リレーションS (B1, B2, ..., Bn)が存在し、以下が成り立つ場合に、 R S は和両立であるという。

  1. m = n
  2. i (1≦i n) について、 dom(Ai ) = dom(Bi )

例えば、表3および表4に示すリレーション 「商店Aの商品」と「商店Bの商品」は和両立である。

 
表3: 商店Aの商品
果物単価販売単位
  リンゴ      80       1   
  ミカン      30       5   
  キウイ      100       3   
 
表4: 商店Bの商品
果物単価販売単位
  リンゴ      80       1   
  ミカン      40       3   
  バナナ      20       10   
 

このとき、「商店Aの商品」と「商店Bの商品」の和集合は、 表5に示すようになる。

表5: 商店Aの商品 ∪ 商店Bの商品
果物単価販売単位
  リンゴ      80       1   
  ミカン      30       5   
  ミカン      40       3   
  キウイ      100       3   
  バナナ      20       10   

□ 差集合演算(R -S )

和両立なリレーションR , S の差集合R -S は、 以下のように定義される。

R -S = { t | t R ∧ ¬(t S )}

例えば、「商店Aの商品」と「商店Bの商品」の差集合は、 表6に示すようになる。

表6: 商店Aの商品 - 商店Bの商品
果物単価販売単位
  ミカン      30       5   
  キウイ      100       3   

□ 共通集合演算(R S )

和両立なリレーションR , S の共通集合R S は、 以下のように定義される。

R S = { t | t R t S }

例えば、「商店Aの商品」と「商店Bの商品」の共通集合は、 表7に示すようになる。

表7: 商店Aの商品 ∩ 商店Bの商品
果物単価販売単位
  リンゴ      80       1   

□ 直積演算(R ×S )

リレーションR , S の直積R ×S は、 以下のように定義される。

R ×S = { (s , t ) | s R t S }

ただし、s = (a 1, a 2, ..., am ), t = (b 1, b 2, ..., bn )とするときに、 (s , t )を以下のように定義する。

(s , t ) = (a 1, a 2, ..., am , b 1, b 2, ...,bn )

例えば、表8および表9に示すリレーション「地域」と「特産」の直積は、 表10に示すようになる。

 
表8: 地域
地方
  東北    青森  
  関東    栃木  
  四国    愛媛  
 
表9: 特産
果物
  青森    リンゴ  
  愛媛    ミカン  
 

表10: 地域 × 特産
地域 . 地方地域 . 県 特産 . 県特産 . 果物
東北 青森 青森 リンゴ
東北 青森 愛媛 ミカン
関東 栃木 青森 リンゴ
関東 栃木 愛媛 ミカン
四国 愛媛 青森 リンゴ
四国 愛媛 愛媛 ミカン

□ 射影演算(R [X ] )

リレーションR における全属性の集合を {A1, A2, ..., An }とし、 その部分集合X を {Ai 1, Ai 2, ..., Ai k }とするとき (ただし、1≦i 1≦i 2≦ ... ≦i kn )、 R X 上の射影をR [X ]もしくは R [Ai 1, Ai 2, ..., Ai k ]と書き、以下のように定義される。

R [Ai 1, Ai 2, ...,Ai k ] = { u | u ∈ dom(Ai 1)× dom(Ai 2)×...× dom(Ai k )∧
(∃t R , t [Ai 1] = u [Ai 1] ∧ t [Ai 2] = u [Ai 2] ∧...∧ t [Ai k ] = u [Ai k ] ) }

これは、あるリレーションの一部の列のみを取り出す演算であり、 例えば、表3に示した「商店Aの商品」の{果物, 単価}の射影は、 表11のようになる。

表3: 商店Aの商品
果物単価販売単位
  リンゴ      80       1   
  ミカン      30       5   
  キウイ      100       3   

表11: 商店Aの商品[果物, 単価]
果物単価
  リンゴ      80   
  ミカン      40   
  バナナ      20   

□ 選択演算(R [Ai θ Aj ], R [Ai θ c ] )

θを=, >, <など、真偽を定める比較演算子とする。 このとき、R の属性Ai Aj 上の 選択R [Ai θAj ]は、 以下のように定義される。

R [Ai θAj ] = {t | t R t [Ai ] θ t [Aj ] }

また同様に、c を定値とし、 R の属性Ai 上のc に関する 選択R [Ai θc ]は、 以下のように定義される。

R [Ai θc ] = {t | t R t [Ai ] θ c ] }

この選択演算は、あるリレーションから、 与えられた条件に適合する行を取り出す演算である。 例えば、表12に示すリレーション「商店Aの販売」があるとする。

表12: 商店Aの販売
果物原価売価
  リンゴ      50       80   
  ミカン      10       30   
  キウイ      70       50   
  バナナ      10       20   
  メロン      800       500   

このとき、属性「売価」の値よりも属性「原価」の値が大きい行を選択する演算は 商品Aの販売[ 原価 > 売価 ]と記述することができ、 その演算結果は表13のようになる。

表13: 商店Aの販売[ 原価 > 売価 ]
果物原価売価
  キウイ      70       50   
  メロン      800       500   

□ 結合演算

θ結合(R [Ai θ Bj ]S )

リレーションR (A1, A2, ..., Am )および リレーションS (B1, B2, ..., Bn )の θ結合 R [Ai θBj ]S は 以下のように定義される。

R [Ai θBj ]S = { (t , u ) | t R t R t [Ai ] θ u [Bj ] }
= (R ×S ) [R . Ai   θ  S . Bj ]

すなわち、θ結合は、リレーションR S の直積として得られる リレーションに選択を行う演算である。

例えば、表8および表9に示すリレーションに対し、 県が一致するものに関するθ結合を行った結果は 表14のようになる。

 
表8: 地域
地方
  東北    青森  
  関東    栃木  
  四国    愛媛  
 
表9: 特産
果物
  青森    リンゴ  
  愛媛    ミカン  
 

表14: 地域 [地域 . 県 = 特産 . 県] 特産
地域 . 地方地域 . 県 特産 . 県特産 . 果物
東北 青森 青森 リンゴ
四国 愛媛 愛媛 ミカン

また、複数の条件θ1, θ2, ..., θkに 基づき結合する場合、以下のように記述する。

R [Ai 1 θ1 Bj 1 , Ai 2 θ2 Bj 2 , ..., Ai k θk Bj k ]S

自然結合(R *S )

次に、リレーションR (A1, A2, ..., Am )および リレーションS (B1, B2, ..., Bn )の 共通の属性を{C1, C2, ..., Ck } = {A1, A2, ..., Am }∧ {B1, B2, ..., Bn }とし、 また、 {D1, D2, ..., Dn - k } = {B1, B2, ..., Bn } - {C1, C2, ..., Ck } するとき、R S の自然結合R *S は 以下のように定義される。

R *S = ( (R ×S ) [A.C1 = B.C1, ..., A.Ck = B.Ck ] ) [A1, ..., Am , D1, ..., Dn-k ]

例えば、表8と表9に示されるリレーションの自然結合地域 * 特産は、 表15のようになる。

表15: 地域 * 特産
地方果物
  東北     青森     リンゴ  
  四国     愛媛     ミカン  

□ 商演算(R ÷S )

n 次のリレーションR および m 次のリレーションS が、 それぞれ以下のようになっているとする。 ただし、m < n とする。

R (A 1, A 2, ..., A n-m , B 1, B 2, ..., B m )
S (B 1, B 2, ..., B m )

このとき、R S で割った商R ÷S は、 以下のように定義される。

R ÷S = { t | t R [A 1, A 2, ..., A n-m ] ∧ (∀u S ) ( (t, u) ∈ R ) }

すなわち商演算は、リレーションS の全ての属性の値を同時に満たす リレーションR の行を選び出し、 S の属性を取り除いた列を取り出す演算である。 たとえば、表16に示す果物の「産地」を示すリレーションと、 表17に示す「需要」を示すリレーションがあった場合に、 需要を同時に満たす産地(の地方と県)は産地 ÷ 需要により求めることができ、 その結果は表18のようになる。

 
表16: 産地
地方果物
  東北     青森     リンゴ  
  東北     山形     スイカ  
  東北     山形     サクランボ  
  東北     福島     リンゴ  
  東北     福島     モモ  
  関東     栃木     イチゴ  
  中部     長野     リンゴ  
  中部     長野     ブドウ  
  中部     長野     モモ  
  四国     愛媛     ミカン  
 
表17: 需要
果物
      リンゴ      
      モモ      
 

表18: 産地 ÷ 需要
地方
   東北       福島   
   中部       長野   

レポート課題

■ レポート課題1

表19および表20に示すリレーションがある。 これについて、以下の設問に答えよ。

 
表19: 研究部
講座氏名
システム村本 英治
システム四石 大
認知科学渡部 信二
認知科学虎井 正之
認知科学為山 雄二
アーキテクチャ川崎 信
アーキテクチャ小河 雄一
アーキテクチャ中島 斜
開放論荻原 敏朗
開放論北町 勝朗
開放論泉川 靖人
 
表20: 教官
氏名出身趣味
荻原 敏朗宮城プログラムシビック
村本 英治新潟カラオケイスト
渡部 信二宮城旅行ルポ
川崎 信岩手フィット
北町 勝朗長野スキーエスティマ
虎井 正之群馬釣りレガシー
四石 大長野スキーインテグラ
中島 斜宮城ピアノカローラ
為山 雄二栃木ドライブミラ
泉川 靖人宮城バイクレガシー
小河 雄一大阪ラジオレビュー
 
(1)

「教官」から出身が宮城で、車がルポである行を選択する 教官[出身="宮城", 車="ルポ"] の演算結果を求めよ。

(2)

「教官」から氏名と趣味の列を取り出す射影 教官[氏名, 趣味] の演算結果を求めよ。

(3)

「教官」から車がレガシーである教官の氏名と出身を求める (教官[車="レガシー"])[氏名, 出身] の演算結果を求めよ。

(4)

出身が長野である教官の氏名、出身、趣味を求めるには どのような演算を行えばよいか、その演算式を求めよ。 また、その演算結果を示せ。

(5)

講座がシステムである講座と氏名、および講座が開放論である講座と氏名の和 研究部[講座="システム"] + 研究部[講座="開放論"] の演算結果を求めよ。

(6)

「研究部」と「教官」の自然結合 研究部 * 教官 の演算結果を求めよ。

(7)

「研究部」と「教官」の自然結合から、 講座が認知科学である行の氏名と趣味をもとめる演算 ( (研究部 * 教官)[講座="認知科学"] )[氏名, 趣味] の演算結果を求めよ。

(8)

「研究部」と「教官」の自然結合から、 講座が認知科学または開放論であり、車がレガシーである行の 氏名と趣味をもとめる演算 ( ( (研究部 * 教官)[講座="認知科学"] + (研究部 * 教官)[講座="開放論"] ) [車="レガシー"] )[氏名, 趣味] の演算結果を求めよ。

(9)

出身が宮城である教官の講座、氏名、車を求めるには どのような演算を行えばよいか、その演算式を求めよ。 また、その演算結果を示せ。

(10)

講座が認知科学またはアーキテクチャである教官の氏名と車を求めるには どのような演算を行えばよいか、その演算式を求めよ。 また、その演算結果を示せ。

■ レポート課題2

以下を証明せよ。 ただし、自由課題とし、1問につき20点を加算する。

(1)

R ÷S が商演算と呼ばれる理由は、 (R ×S ) ÷S = R が成り立つためである。 (R ×S ) ÷S = R が成り立つことを 定義に基づき証明せよ。

(2)

リレーションR および S R (A 1, A 2, ..., An-m , B 1, B 2, ..., Bm ) , S (B 1, B 2, ..., Bm ) とするとき、 商演算R ÷S は、直積演算、射影演算、差演算により、 以下のように表すことができる。

R ÷S = R [A 1, A 2, ..., An-m ] - ( ( R [A 1, A 2, ..., An-m ] ×S ) -R ) [A 1, A 2, ..., An-m ]

これを定義に基づき証明せよ。

■ 参考書籍、Web

  1. 増永 良文 著: 「リレーショナルデータベース入門」 サイエンス社, ISBN4-7819-0594-3, 2,400円

Last modified: Tue Jun 21 10:59:59 JST 2005