본문 바로가기
IT 이론/데이터베이스

여러가지 관계해석식 표현법과 예제

by 지식id 2013. 1. 12.
반응형

*관계 대수와의 비교
관계 대수식은 절차적(procedural)인 반면에 관계 해석식은 비절차적이다. 그러나 두 언어의 표현력(expresive power)은 동등하다.

튜플 관계 해석식

 

셀렉트 연산 : { t | EMPLOYEE(t) and t.SALARY>5000 }
프로젝트 연산 : { t.FNAME, t.LNAME | EMPLOYEE(t) }
셀렉트 + 프로젝트 : { t.FNAME, t.LNAME | EMPLOYEE(t) and t.SALARY > 50000 }

 


 

Ex1) Research 부서에서 일하는 모든 사원들의 이름과 주소를 검색하라

{ e.FNAME, e.LNAME, e.ADDRESS | EMPLOYEE(e) and (∃d) (DEPARTMENT(d) and d.DNAME = ‘Research’ and d.DNUMBER = e.DNO) }
*출력되는 릴레이션에 포함되지 않은 경우 Existential quantifier를 붙여준다.

 

 



Ex2) Stafford 에 위치한 모든 프로젝트의 트로젝트 번호, 관리 부서의 번호와 부서 관리자의 성, 생일, 그리고 주소를 나열하라.

먼저 나열할 목록(릴레이션, 애트리뷰트)를 적어 준다.
{ p.PNUMBER, p.DNUM, m.LNAME, m.BDATE, m.ADDRESS |

나열에 필요한 릴레이션을 적어 보자
{ p.PNUMBER, p.DNUM, m.LNAME, m.BDATE, m.ADDRESS | PROJECT(p) and EMPLOYEE(m)

조건을 적어준다.
{ p.PNUMBER, p.DNUM, m.LNAME, m.BDATE, m.ADDRESS | PROJECT(p) and EMPLOYEE(m) and p.PLOCATION = 'Stafford' and

필요한 정보들을 출력하기 위한 추가 조건을 적어준다.
부서 관리자는 부서 릴레이션에 존재한다. 그러므로 부서 릴레이션도 호출 되어야 한다. 출력되는 릴레이션에 포함되어 있지 않으므로 Existential Quantifier가 필요하다.

{ p.PNUMBER, p.DNUM, m.LNAME, m.BDATE, m.ADDRESS | PROJECT(p) and EMPLOYEE(m) and p.PLOCATION = 'Stafford' and ((∃d)(DEPARTMENT(d) and p.DNUM = d.DNUMBER and d.MGRSSN = m.SSN)) }

필요에 따라 같은 릴레이션도 다른 이름으로 명명 될 수 있다.

 



Ex3) 각 사원에 대하여, 그 사원의 이름과 성, 그리고 직속(直屬) 상사(上司)의 이름과 성을 검색하라.

{e.FNAME, e.LNAME, s.FNAME, s.LNAME | EMPLOYEE(e) and EMPLOYEE(s) and e.SUPERSSN = s.SSN}

여러가지 경우를 표현 하고자 할때 질의를 or로 묶을 수도 있다.

 

 



Ex4) 'Smith'라는 성을 가진 사원이 직원(職員)이나 관리자로서 관여(關與)된 프로젝트들을 나열(羅列)하라.

{p.PNAME | PROJECT(p) and (
((∃e)(∃w)(EMPLOYEE(e) and WORKS_ON(w) and w.PNO = p.PNUMBER and e.LNAME = ‘Smith’ and e.SSN = w.ESSN))
or
((∃m)(∃d)(EMPLOYEE(m) and DEPARTMENT(d) and p.DNUM = d.DNUMBER and d.MGRSSN = m.SSN and m.LNAME = ‘Smith’))
)}

 


 

도메인 관계 해석식

 

튜블 변수 대신 도메인 변수를 사용한다. 각 변수는 한 애트리뷰트의 도메인을 범위로 갖는다.
차수가 n인 릴레이션을 구성하려면 n개의 도메인 변수를 명시한다.

Ex) 이름이 'John B. Smith'인 사원의 생일과 주소를 검색하라.

EMPLOYEE의 각 애트리뷰트들을 위한 열개의 도메인 변수를 다 적는다.
EMPLOYEE(abcdefghij)

순서대로, BDATE와 ADDRESS를 위한 5번째, 6번째 변수 ef를 출력하고자 한다.
{ ef | EMPLOYEE(abcdefghij) }

조건에 참여하는 변수들은 Existential quantifier로 속박한다.
{ ef | (∃a) (∃b) (∃c)(EMPLOYEE(abcdefghij) }

그리고 조건을 적는다.
{ ef | (∃a) (∃b) (∃c)(EMPLOYEE(abcdefghij) and a='John" and b='B' and c='Smith') }

다음과 같은 표기도 쓰인다. (QBE용)
{ ef | EMPLOYEE('John', 'B', 'Smith', d,e,f,q,h,i,j) }

 

 

반응형

댓글