知識ベース論課題/2002年11月8日提出

環境情報学部3年 70060330 t00274yw 和田裕介

A.知識ベースおよびリレーショナルデータベースの以下の項目について説明せよ

(1)データベースから知識ベースへの発展について考える。データベースシステムの発展型として位置づけられる知識ベースシステムについて、その特徴をリレーショナルデータベースとの比較において考察せよ

知識ベースは、知識の蓄積、共有、探索、獲得、推論を体系的活効率的に実現するための基本的な枠組みを与えることを目的としたシステム

推論の例として3段論法がある。これはAならばB、BならばC→AならばCというものだ。

(2)リレーショナルモデルが規定するデータ構造(リレーション)が満たすべき性質を説明せよ。また、リレーショナルモデルの基本演算である関係代数演算(relational algebra)を列挙し、それらの演算の内容を簡潔に説明せよ。

配布したリレーショナルデータベースの関係代数プログラム(LISPプログラム)を用いて実際に知識ベースを構築する

(1)知識ベースの応用分野を設定し、その応用を実現するための独自のデータベースの概念スキーマを設計し、また、そのスキー0間によるリレーションを以下の条件で作成する。

分野は もの(所有物)を介したコミュニケーション

名前は「スガパクホンダナ」言い、ER図は以下である。

er

以下は今回使うデータベースを表したものだ。

scheme
;;;知識ベース論課題
;;;2002/11/08提出
;;;スガパク知識ベース
;;;70060330 t00274yw Yusuke Wada

(load "rdb_ops.lsp")

;;;B.(1)

(defun Jacket() '((hon_name pic setumei)
		  (morning morning.jpg 2nd_album_of_oasis)
		  (inmyplace inmy.jpg 2nd_album_of_coldplay)
		  (themusic themusic.jpg 1st_album_of_themusic)
		  (richard richard.jpg 1st_albmu_of_richard)
		  (spiderman spiderman.jpg dvd_of_spiderman)
		  (pingpong pingpong.jpg dvd_of_pingpong)
		  ))


(defun Hondana() '((motinushi ID)
		   (yusuke 1)
		   (kc 2)
		   (sugano 3)
		   (sugano 4)
		   (takao 5)
		   (yusuke 6)
		   (shunp 7)
		   (kc 8)
		   (yusuke 9)
		   (hatayan 10)
		   ))


(defun Hon() '((ID path hon_name)
	       (1 morning.mp3 morning)
	       (2 morningglo.mp3 morning)
	       (3 morning.mp3 morning)
	       (4 pong.mpeg pingpong)
	       (5 pong.avi pingpong)
	       (6 pong.mpeg pingpong)
	       (7 pong.mpeg pingpong)
	       (8 inmy.mp3 inmyplace)
	       (9 in.mp3 inmyplace)
	       (10 themusic.mp3 themusic)
	       ))

(defun Motinushi_data() '((ID kanso whoFrom whoTo)
			  (1 4 kc sugano)
			  (2 3 null yusuke)
			  (3 5 yusuke null)
			  (4 4 null takao)
			  (5 2 sugano yusuke)
			  (6 1 takao shunp)
			  (7 4 yusuke null)
			  (8 5 yusuke null)
			  (9 5 null kc)
			  (10 1 null null)
			  ))


    

(2)(1)にて作成したデータベースを対象として、実習において用いた関数代数演算(Relational Algebra)のプログラムによって処理される独自の問い合わせを記述し、実行する

;;;B.(2)

;;;その1
;;;yusukeが持っているホンを全て表示する
(projection (join (selection (Hondana) 'motinushi 'yusuke 'eq) 'ID (Hon) 'ID #'=) '(hon_name))

;;;以下実行結果
;;selection: 10
;;join-start
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-end
;;projection: 3
;;((hon_name) (morning) (pingpong) (inmyplace))



;;;B(3)
;;;同じ結果が返るが、先にjoinをするので負荷が高い
;;;joinへ渡すタプルをなるべく少なめにすることを考慮すると負荷を少なくすることができる
(projection (selection (join (Hondana) 'ID (Hon) 'ID #'=) 'motinushi 'yusuke 'eq) '(hon_name))

;;;実行結果
;;join-start
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-end
;;selection: 10
;;projection: 3
;;((hon_name) (morning) (pingpong) (inmyplace))


;;;その2
;;;IDが9のジャケット写真を見る

(projection (join (selection (Hon) 'ID '9 'eq) 'hon_name (Jacket) 'hon_name 'eq) '(pic))

;;;実行結果
;;selection: 10
;;join-start
;;join-sub: 6
;;join-end
;;projection: 1
;;((pic) (inmy.jpg))


;;;その3
;;;感想が5のホンの名前を見る

(projection (join (selection (Motinushi_data) 'kanso 5 #'=) 'ID (Hon) 'ID 'eq) '(hon_name))

;;;実行結果
;;selection: 10
;;join-start
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-end
;;projection: 3
;;((hon_name) (morning) (inmyplace) (inmyplace))

    

ユーザが検索対象とするデータベースの外部スキーマ(ビュー)をプログラムによって記述し、そのビューを対象とした問い合わせを記述し、実行結果を示せ。

;;;;;;B.(4)
;;;外部ビューを実装
;;;名前を与えてその人が持っているホンを表示する
(defun getHon(who)
  (projection (join (selection (Hondana) 'motinushi who 'eq) 'ID (Hon) 'ID #'=) '(hon_name))
  )


;;;実行結果
;;(getHon 'kc)
;;selection: 10
;;join-start
;;join-sub: 10
;;join-sub: 10
;;join-end
;;projection: 2
;;((hon_name) (morning) (inmyplace))
    

(c)Copyright 2002 Yusuke Wada