*관계 대수와의 비교
관계 대수식은 절차적(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) }
'IT 이론 > 데이터베이스' 카테고리의 다른 글
[데이터베이스] 해싱(Hashing) 관련 용어 (0) | 2014.05.24 |
---|---|
[데이터베이스] 로킹(Locking) 기법과 로킹 단위 (0) | 2014.05.22 |
여러가지 관계대수식 표현법과 예제 (0) | 2013.01.12 |
[데이터베이스] Super Key, Candidate Key, Primary Key (0) | 2013.01.12 |
[데이터베이스] Null값이 의미하는 두 가지 (0) | 2013.01.12 |
댓글