Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 제 5 장 기타 관계형 언어 Query-by-Example (QBE) Quel Datalog Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Query-by-Example (QBE) 기본 구조 단일 릴레이션에 대한 질의 여러 릴레이션에 대한 질의 조건 박스 결과 릴레이션 튜플 출력의 순서 지정 집성 연산 데이터베이스의 수정 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 QBE - 기본 구조 도메인 관계형 해석에 기반을 둔(대략) 그래픽 질의어 2차원 구문 - 사용자가 요청하는 릴레이션의 틀을 시스템이 생성한다. 질의는 “예”로 표현된다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 골격 테이블 branch branch-name branch-city assets customer customer-name customer-street customer-city loan branch-name loan-number amount Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 골격 테이블(계속) borrower customer-name loan-number account branch-name account-number balance depositor customer-name account-number Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 단일 릴레이션에 대한 질의 Perryridge 지점의 모든 대출 번호를 찾아라. loan branch-name loan-number amount Perryridge P._x - _x 는 변수 (선택 사항) - P. 은 print (display)를 의미 - 중복은 제거 된다. Perryridge P.ALL. - 중복이 제거 되지 않는다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 단일 릴레이션에 대한 질의(계속) 모든 대출의 상세 내역을 디스플레이 하라. - 방법 1 : loan branch-name loan-number amount P._x P._y P._z - 방법 2 : 간략한 표기법 P. - 700불을 초과하는 대출액을 가진 모든 대출의 대출 번호를 찾아라. P. > 700 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 단일 릴레이션에 대한 질의 (계속) Smith와 Jones에게 공동으로 이루어진 모든 대출의 대출 번호를 찾아라. borrower customer-name loan-number “Smith” P._x “Jones” _x Smith, Jones 또는 둘 다에게 이루어진 모든 대출의 대출 번호를 찾아라. “Jones” P._y Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 여러 릴레이션에 대한 질의 Perryridge 지점에서 대출을 받은 모든 고객의 이름을 찾아라. loan branch-name loan-number amount perryridge _x borrower customer-name loan-number P._y _x Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 여러 릴레이션에 대한 질의(계속) 은행에 예금과 대출을 모두 가진 고객의 이름을 찾아라. depositor customer-name account-number P._x borrower customer-name loan-number _x Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 여러 릴레이션에 대한 질의(계속) 은행에 예금은 있지만 대출은 없는 모든 고객의 이름을 찾아라. depositor customer-name account-number P._x borrower customer-name loan-number _x 은 “존재하지 않는다”를 의미한다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 여러 릴레이션에 대한 질의 (계속) 적어도 두 개의 예금 계좌를 가진 모든 고객을 찾아라. depositor customer-name account-number P._x _y _x _y 은 “같지 않음”을 의미한다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 조건 박스 골격 테이블 내에 표현하기 불편하거나 불가능한 도메인 변수에 대한 제약 조건의 표현을 허용한다. 잔고가 1,300불에서 2,000불 사이 이면서 정확히 1,500불은 아닌 모든 계좌 번호를 찾아라. account branch-name account-number balance P. _x conditions _x = ( > 1300 and < 2000 and 1500) Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 결과 릴레이션 Perryridge 지점에 예금이 있는 모든 고객의 customer-name, account-number 및 balance를 찾아라. - 다음과 같이 할 필요가 있다 : * depositor와 account를 죠인한다. * customer-name, account-number 및 balance를 추출한 다. - 위와 같이 하려면 : * customer-name, account-number 및 balance 애트리뷰트를 가진 result라는 이름의 골결 테이블을 생성한다. * 질의를 작성한다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 결과 릴레이션 (계속) 결과 질의 : banch-name account-number balance Perryridge _y _z depositor customer-name account-number _x _y result customer-name account-number balance P. _x _y _z Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 튜플의 출력 순서 지정 AO = 오름차순, DO = 내림차순 여러 애트리뷰트에 대해 정렬할 때, 정렬 순서는 각 정렬 연산자(AO 또는 DO)의 괄호 안에 정수를 넣어 지정한다. Perryridge 지점의 모든 계좌 번호를 알파벳순의 오름차순으로 정렬하면서 예금 잔고는 내림 차순으로 열거하라. account branch-name account-number balance Perryridge P.AO(1). P.DO(2). Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 집성 연산 집성 연산자에는 AVG, MAX, MIN, SUM 및 CNT가 있다. 위의 연산자에는 항상 뒤에 “ALL”이 붙어야 한다. (예를 들어, SUM.ALL 또는 AVG.ALL._x) Perryridge 지점의 모든 예금 잔고 합계를 찾아라. account branch-name account-number balance Perryridge P.SUM.ALL. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 집성 연산 (계속) 은행에 예금을 가진 고객의 총 수를 찾아라. depositor customer-name account-number P.CNT.UNQ.ALL. 유의 : UNQ는 중복 제거를 원할 때 사용한다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 질의 예제 각 지점의 평균 잔고를 찾아라. account branch-name account-number balance P.G. P.AVG.ALL._x 유의 : - P.G의 G는 SQL의 group by 구조와 유사하다. - balance 열내 P.AVG.ALL내의 ALL은 모든 잔고를 고려해야 함을 보장한다. 평균 예금 잔고가 1,200불을 초과하는 지점들만의 평균 예금 잔고를 찾아라. 조건 박스를 추가한다. conditions AVG.ALL._x > 1200 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 질의 예제 Brooklyn에 위치한 모든 지점에 예금이 있는 모든 고객을 찾아라. depositor customer-name account-number P.G._x _y account branch-name account-number balance CNT.UNQ.ALL._z _y branch branch-name branch-city assets _z Brooklyn _w Brooklyn Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
질의 예제 (계속) CNT.UNQ.ALL._w는 Brooklyn내 서로 다른 지점의 수를 지정한다. conditions CNT.UNQ.ALL._z = CNT.UNQ.ALL._w CNT.UNQ.ALL._w는 Brooklyn내 서로 다른 지점의 수를 지정한다. CNT.UNQ.ALL._z는 고객 x가 예금을 가진 Brooklyn내 서로 다른 지점의 수를 지정한다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 데이터베이스의 수정 - 삭제 릴레이션으로 부터 튜플의 삭제는 D. 명령으로 표현한다. 어떤 열만의 정보를 삭제하는 경우에는 – 로 표시되는 널 값이 삽입된다. 고객 Smith를 삭제하라. customer customer-name customer-street customer-city D. Smith 지점명이 Perryridge인 지점의 branch-city 값을 삭제하라. branch branch-name branch-city assets Perryridge D. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 삭제 질의 예제 대출액이 1,300불에서 1,500불 사이의 모든 대출을 삭제하라. loan branch-name loan-number amount D. _y _x borrower customer-name loan-number D. _y conditions _x = ( 1300 and 1500 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 삭제 질의 예제 (계속) Brooklyn에 위치한 지점의 모든 예금 계좌를 삭제하라. account branch-name account-number balance D. _x _y depositor customer-name account-number D. _y branch branch-name branch-city assets _x Brooklyn Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 데이터베이스의 수정 - 삽입 삽입은 질의 표현식에 I. 연산자를 넣어 수행한다. Perryridge 지점에 700불의 잔고를 가진 계좌 번호 A-9732를 삽입하라. Perryridge 지점의 모든 대출 고객에게 새로이 200불의 저축 예금 계좌를 부여하는데, 새로운 저축 예금 계좌의 계좌 번호는 대출 번호로 한다. (다음 화면) account branch-name account-number balance I. Perryridge A-9732 700 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 데이터베이스의 수정-삽입 (계속) account branch-name account-number balance I. Perryridge _x 700 depositor customer-name account-number I. _y _x loan branch-name loan-number amount Perryridge _x borrower customer-name loan-number _y _x Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 데이터베이스의 수정 - 갱신 튜플내의 모든 값을 변경하지 않고 일부 값을 변경할 때 U. 연산자를 사용한다. QBE에서는 사용자가 주 키 필드를 갱신하지 못하도록 한다. Perryridge지점의 자산 값을 10,000,000불로 갱신하라. 모든 잔고에 5%의 이자를 지급하라. branch branch-name branch-city assets Perryridge U.10000000 account branch-name account-number balance U. _x*1.05 _x Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 Quel 기본 구조 단순 질의 튜플 변수 집성 함수 데이터베이스의 수정 집성 연산 Quel과 튜플 관계형 해석 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 Quel - 기본 구조 University of California, Berkeley에서 개발한 Ingres 데이터베이스 시스템용 질의어로 소개됨. 기본 구조는 튜플 관계형 해석의 것과 동등함. 대부분의 Quel 질의는 세가지 유형의 절을 사용해 표현된다 : range of , retrieve 및 where – 각 튜플 변수는 range of 절 내에 선언된다. t는 릴레이션 r내의 튜플 값에만 한정된 튜플 변수임 을 선언한다. – retrieve 절은 SQL의 select 절의 기능과 유사하다. – where 절에는 선택 술어를 내포한다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 Quel 질의 구조 전형적인 Quel 질의는 다음과 같은 형식이다 : – 각 ti는 튜플 변수이다. – 각 ri는 릴레이션이다. – 각 A jk는 애트리뷰트이다. – t.A 표기는 애트리뷰트 A상의 튜플 변수 t의 값을 의미한다. range of t1 is r1 range of t2 is r2 • range of t m is rm retrieve (t i1 .Aj1 ,ti2 .A j2 ,...,t i n .A j n) where P Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 Quel 질의 구조 (계속) Quel에는 intersect, union 및 minus 같은 관계형 대수 연산자는 포함하지 않는다. Quel에서는 SQL과는 달리 중첩 부 질의를 허용하지 않는다. – where 절 안에 내포 retrieve - where 절을 가질 수 없다. 이러한 제약이 Quel의 표현 능력을 감소시키지만, 사용자는 질의 표현을 위한 약간의 대안은 가진다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 단순 질의 은행에 대출이 있는 모든 고객의 이름을 찾아라. 중복을 제거하려면, retrieve 절에 키워드 unique를 추가해야 한다 : range of t is borrower retrieve (t.customer-name) range of t is borrower retrieve unique (t.customer-name) Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 여러 릴레이션에 대한 질의 은행에 대출과 예금을 모두 가진 고객의 이름을 찾아라. range of s is borrower range of t is depositor retrieve unique (s. customer-name) where t.customer-name =s.customer-name Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 튜플 변수 어떤 질의는 같은 릴레이션에 범위를 두는 두 개의 서로 다른 튜플 변수를 가질 필요가 있다. Jones와 같은 도시에 살고 있는 모든 고객의 이름을 찾아라. range of s is customer range of t is customer retrieve unique (s. customer-name) where t.customer-name = “Jones” and s.customer-city =t.customer-city Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 튜플 변수 (계속) 질의가 한 릴레이션에 대한 하나의 튜플 변수만을 필요로 할 때는 , range of 문을 생략하고 묵시적으로 선언되는 튜플 변수로서 릴레이션명 자체를 사용할 수 있다. 은행에 대출과 예금을 모두 가진 고객의 이름을 찾아라. retrieve unique (borrower.customer-name) where depositor.customer-name =borrower.customer-name Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 집성 함수 Quel에서의 집성 함수는 튜플들의 그룹에 대한 함수를 계산한다. 그룹핑은 각 집성 표현식의 일부로서 지정한다. Quel 집성 표현식은 다음과 같은 형식을 갖는다. 집성 함수(t.A) 집성 함수(t.A where P) 집성 함수(t.A by s.B1, s.B2, …, s.B n where P) – 집성 함수는 count, sum, avg, max, min, countu, sumu, avgu 또는 any중의 하나이다. – t와 s는 튜플 변수이다. – A, B1, B2, …, B n은 애트리뷰트이다. – P는 retrieve내의 where 절과 유사한 술어이다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 집성 함수 (계속) countu, sumu 및 avgu는 그들의 오퍼랜드에서 중복을 제거한다는 것을 제외하고는 count, sum 및 avg 각각과 동일하다. 집성 표현식은 상수가 나타날 수 있는 곳 어디에라도 나타날 수 있다 ; 예를 들어, where 절 내에 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 예제 질의 Perryridge 지점의 모든 예금에 대한 평균 예금 잔고를 찾아라. range of t is account retrieve avg (t.balance where t.branch-name = “Perryridge”) 잔고가 Perryridge 지점의 평균 예금 잔고를 초과하는 모든 계좌를 찾아라. range of u is account retrieve (t.account-number) where t.balance > avg (u.balance where u.branch-name = “Perryridge”) Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 예제 질의 예금 계좌가 있는 지점의 평균 예금 잔고를 초과하는 모든 계좌를 찾아라. – account내의 각 튜플 t에 대해 t.barnch-name 지점에서의 평균 잔고를 계산한다. – 이들 튜플의 그룹을 형성하기 위해 집성 표현식 내에 by 구조 를 사용한다. 질의는 다음과 같다 : range of u is account range of t is account retrieve (t.account-number) where t.balance > avg (u.balance by t.branch-name where u.branch-name = t.branch-name) Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 예제 질의 은행에 예금은 있으나 대출은 없는 모든 고객의 이름을 찾아라. range of t is depositor range of u is borrower retrieve unique (t.customer-name) where any (u.loan-number by t.customer-name where u.cstomer-name = t.customer-name) = 0 any를 가진 비교의 사용은 관계형 해석의 “존재한다” 한정자와 유사하다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 예제 질의 Brooklyn에 위치한 모든 지점에 예금을 가진 고객의 이름을 찾아라. – 먼저 Brooklyn내 지점의 수를 결정한다. – 이 수를 각 고객이 예금을 가진 Brooklyn내 서로 다른 지점의 수와 비교한다. range of t is depositor range of u is account range of s is branch range of w is branch retrieve unique (t.customer-name) where countu (s.branch-name by t.customer-name where u.account-number =t.account-number and u.branch-name =s.branch-name and s.branch-city = “Brooklyn”) = countu (u.branch-name where u.branch-city = “Brooklyn”) Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 데이터베이스의 수정 - 삭제 Quel 삭제의 형식은 다음과 같다. 튜플 변수 t는 묵시적으로 정의될 수 있다. 술어 P는 어떠한 타당한 Quel 술어일 수 있다. where 절이 생략되면, 릴레이션내 모든 튜플이 삭제 된다. range of t is r delete t where P Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 삭제 질의 예제 loan 릴레이션내의 모든 튜플을 삭제하라. range of t is loan delete t Smith의 모든 예금 레코드를 삭제하라. range of t is depositor where t.customer-name = “Smith” Needham에 위치한 지점들의 모든 예금 레코드를 삭제하라. range of t is account range of u is branch where t.branch-name =u.branch-name and u.branch-city = “Needham” Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 데이터베이스의 수정 - 삽입 삽입은 Quel에서 append 명령을 사용해 표현한다. Perryridge 지점에 700불의 잔고를 가진 계좌 번호 A-9732를 삽입하라. append to account (branch-name = “Perryridge”, account-number = A-9732, balance = 700) Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 삽입 질의 예제 Perryridge 지점의 모든 대출 고객에게 새로이 200불의 저축 예금 계좌를 제공한다. 새로운 저축 예금의 계좌 번호는 대출 번호로 한다. range of t is loan range of s is borrower append to account (branch-name = t.branch-name, account-number = t.loan-number, balance = 200) where t.branch-name = “Perryridge” append to depositor (customer-name = s.customer-name, account-number = s.loan-number) where t.branch-name = “Perryridge” and t.loan-number = s.loan-number Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 데이터베이스의 수정 - 갱신 갱신은 Quel에서 replace 명령을 사용해 표현한다. 모든 계좌의 잔고에 5%의 이자를 지급하라. 잔고가 10,000불을 초과하는 예금 계좌에는 6%의 이자를 지급하고, 그 외의 계좌에는 5%의 이자를 지급하라. range of t is account replace t (balance =1.05* t.balance) range of t is account replace t (balance = 1.06 * balance) where t.balance > 10000 replace t (balance = 1.05 * balance) where t.balance 10000 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 집합 연산 Quel에는 intersect, union 및 minus 같은 관계형 대수 연산은 포함하지 않는다. 집합 연산을 필요로 하는 질의를 구성하려면, 임시 릴레이션을 생성해야 한다 (정규 Quel 문장을 사용해). 예 : 은행의 모든 예금주명을 가질 임시 릴레이션 temp를 생성하려면, 다음과 같이 작성한다. into temp 절은 이 질의의 결과를 가질 새로운 릴레이션 temp가 생성되도록 한다. range of u is depositor retrieve into temp unique (u.customer-name) Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 예제 질의 은행에 예금, 대출 또는 모두를 가진 고객의 이름을 찾아라. Quel에는 union 연산이 없으므로, 은행의 모든 대출자의 이름을 가지는 새로운 릴레이션(temp)이 생성되어야 한다. 은행의 모든 대출자를 찾아 append 명령을 사용해 새로이 생성된 릴레이션 temp에 삽입해야 한다. 다음과 같이 하여 질의를 완성한다. range of s is borrower append to temp unique (s.customer-name) range of t is temp retrieve unique (t.customer-name) Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 예제 질의 은행에 예금은 있으나 대출은 없는 모든 고객의 이름을 찾아라. 다음과 같이 작성하여 임시 릴레이션을 생성한다. range of u is depositor retrieve into temp (u.customer-name) temp에서 대출이 있는 고객을 삭제한다. range of s is borrower range of t is temp delete t where t.customer-name =s.customer-name temp에는 이제 필요한 고객 리스트만 포함한다. 다음과 같이 작성하여 질의를 완성한다. range of t is temp retrieve unique (t.customer-name) Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 Quel과 튜플 관계형 해석 다음과 같은 Quel 질의는 아래와 같은 튜플 관계형 해석 표현과 같다. range of t1 is r1 range of t2 is r2 • range of tm is rm retrieve unique (t i1 .A j1 ,ti2 .A j2 ,...,t i n .A j n) where P { t | t1 r1, t2 r2, ..., t m r m ( t[ri1.A j1] = ti1 [A j1] ^ t[ri2.A j2] = ti2 [A j2] ... t[r i n.A j n] = t i n[A j n] P (t1, t2, ..., t m))} Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 Quel과 튜플 관계형 해석 (계속) t1 r1 t2 r2 … t m r m t1, t2, …, t m 내의 각 튜플은 한정된 범위의 릴레이션내 튜플들의 값을 취해야 한다는 제약이다. t[ri1.Aj1] = ti1[Aj1] ti2[Aj2] = t[ri2.Aj2] … t[r in.A jn] = tin[A jn] Quel 질의의 retrieve 절에 대응한다. P(t1, t2, …, t m) Quel 질의내 where 절로 부과되는 t1, t2, …, t m에 대한 허용 가능한 값들의 제약 조건 Quel은 any 집성 함수와 임시 릴레이션에의 삽입과 삭제라는 수단으로 관계형 대수의 기능을 대신한다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 Datalog 기본 구조 Datalog 규칙의 구문 비순환 Datalog의 시맨틱 안전성 Datalog에서의 관계형 연산 Datalog에서의 순환 순환의 능력 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 기본 구조 순환 질의를 허용하는 Prolog형 논리 기반 언어 ; 제 1차 논리에 기반을 둠. Datalog 프로그램은 뷰를 정의하는 규칙들의 집합으로 구성된다. 예 : Perryridge 지점의 잔고가 700불을 초과하는 예금의 계좌 번호와 잔고를 포함하는 뷰 릴레이션 v1을 정의하라. 뷰 릴레이션 v1내의 계좌 번호 A-217의 잔고를 검색하라. v1( A, B) :- account(“Perryridge”, A, B), B > 700. ? v1(“A-217”, B). Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 예제 질의 각 규칙은 뷰 릴레이션이 포함해야 할 튜플들의 집합을 정의한다. 뷰 릴레이션의 튜플들의 집합은 뷰 릴레이션에 대한 규칙들로 정의된 모든 튜플들의 집합의 합집합으로 정의된다. 예 : 은행에 예금은 있지만 대출은 없는 고객의 이름을 내포하는 뷰 릴레이션 c를 정의하라. interest-rate( A, 0) :- account(N, A, B), B < 2000 interest-rate( A, 5) :- account(N, A, B), B >= 2000 c(N) :- depositor(N, A), not is-borrower(N). is-borrower(N) :- borrower(N, L). Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 Datalog 규칙의 구문 긍정문은 다음과 같은 형식을 갖는다. – p는 n개의 애트리뷰트를 가진 릴레이션명이다. – 각 t i는 상수 또는 변수이다. 부정문은 다음과 같은 형식을 갖는다. p(t1, t2, ..., t n) not p( t1, t2, ..., t n ) Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 Datalog 규칙의 구문 (계속) 규칙은 리터럴로 구축되며 다음과 같은 형식을 갖는다. – 각 Li는 리터럴이다. – 머리부 - 리터럴 p(t1, t2, …, t n) – 몸체 - 리터럴의 나머지 부분 사실이란 다음과 같은 형식의 몸체가 없는 규칙이다. – 위는 튜플(v1, v2, …, vn)이 릴레이션 p에 있음을 나타낸다. p( t1, t2, ..., t n) :- L1, L2, ..., L n. p( v1, v2, ..., v n). Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 규칙의 시맨틱 규칙의 근본 사례화 (단순히 사례화)는 규칙내의 각 변수를 어떤 상수로 대치한 결과이다. v1을 정의하고 있는 규칙 위 규칙의 사례화 예 : 규칙 사례화 R의 몸체는 다음과 같으면 사실들의 집합 (데이터베이스 사례) I내에서 만족된다. 1. R내 몸체내의 각 긍정문 q i(vi,1, …, vi,n i)에 대해 I가 사실 q i(vi,1, …, vi,n i) 를 내포하면 2. R내 몸체내의 각 부정문 not q j(v j,1, …, v j,n j)에 대해 I가 사실 q j(v j,1, …, v j,n j) 를 내포하지 않으면 v1(A, B) :- account(“Perryridge”, A, B), B > 700. v1(“A-217”, 750) :- account(“Perryridge”, “A-217”, 750), 750 > 700. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 규칙의 시맨틱 (계속) 주어진 사실들의 집합 I로 부터 추론할 수 있는 사실들의 집합은 다음과 같이 규칙 R을 사용해 정의한다. 규칙들의 집합 R = {R1, R2, …, R n}이 주어지면, 다음과 같이 정의한다. infer(R, I) = {p( t1, ..., t n i) | p(t1, …, t n i)가 R의 머리부 이고 R의 몸체가 I 내에서 만족되는 곳 에 R의 사례화 R가 존재한다. infer(R, I) = infer(R1, I) infer(R2, I) ... infer(Rn, I) Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 규칙의 층 Perryridge 지점의 각 계좌에 대한 이자를 정의하라. 뷰 릴레이션의 층 interest(A, I) :- perryridge-account(A, B), interest-rate(A, R), I = B * R/100. perryridge-account(A, B) :- account(“Perryridge”, A, B). interest-rate(A, 0) :- account(N, A, B), B < 2000. interest-rate(A, 5) :- account(N, A, B), B >= 2000. interest layer 2 interest-rate perryridge-account layer 1 database account Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 규칙의 층 (계속) 형식적으로 릴레이션을 정의하고 있는 규칙들의 몸체에서 사용된 모든 릴레이션들이 데이터베이스에 저장되어 있으면 릴레이션은 1층에 존재한다. 릴레이션을 정의하고 있는 규칙들의 몸체에서 사용된 모든 릴레이션들이 데이터베이스 또는 1층에 저장되어 있으면 릴레이션은 2층에 존재한다. 다음과 같으면 릴레이션 p는 i+1 층에 존재한다. – 릴레이션이 1, 2, …, i 층에 존재하지 않는다. – p를 정의하고 있는 규칙들의 몸체에서 사용된 모든 릴레이션들이 데이터베이스 또는 1, 2, …, i 층에 저장 되었다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 프로그램의 시맨틱 주어진 프로그램내의 층을 1, 2, …, n이라 하자. Ri를 i층 내의 뷰 릴레이션들을 정의하고 있는 모든 규칙들의 집합을 나타 낸다 하자. I0는 데이터베이스에 저장된 사실들의 집합으로 정의한다. Ii+1 = Ii infer(Ri+1, Ii)로 정의한다. 프로그램에 의해 정의된 뷰 릴레이션내 사실들의 집합 (프로그램의 시맨틱이라 함)은 가장 상위층 n에 대응하 는 사실들의 집합 In으로 주어진다. 유의 : 대신에 관계형 대수에서 처럼 뷰 확장을 사용해 시맨틱 을 정의할 수 있지만, 위와 같은 정의가 순환 같은 확장을 처리하는 데는 보다 낫다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 안정성 무한한 답을 생성하는 규칙을 작성할 수도 있다. 이러한 가능성을 피하기 위해 Datalog 규칙은 다음과 같은 안전성 조건을 만족해야만 한다. – 규칙의 머리부에 나타나는 모든 변수는 규칙의 몸체 내에 비 산술 긍정문 내에 또한 나타난다. – 규칙의 몸체내 부정문에 나타나는 모든 변수는 규칙 의 몸체내 어떤 긍정문에 또한 나타난다. gt(X, Y) :- X > Y not-in-loan(B, L) :- not loan(B, L) Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 Datalog에서의 관계형 연산 account에서 애트리뷰트 account-name을 추출하라. 릴레이션 r1과 r2의 카티전 곱 릴레이션 r1과 r2의 합집합 릴레이션 r1과 r2의 차집합 query(A) :- account(N, A, B). query(X1, X2, ..., X n, Y1, Y2, ..., Y m ) :- r1( X1, X2,...,X n ), r2( Y1,Y2, ...,Y m). query (X1, X2, ..., X n ) :- r1(X1, X2, ..., X n ). query (X1, X2, ..., X n ) :- r2(X1, X2, ..., X n ). query (X1, X2, ..., X n ) :- r1( X1, X2, ..., X n), not r2(X1, X2, ..., X n). Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 Datalog에서의 순환 Y가 직간접으로 관리하고 있는 X인 모든 튜플(X, Y)를 내포하는 뷰 릴레이션 empl을 생성하라. Jones의 직간접 부하 직원들을 찾아라. employee-name manager-name Alon Barinsky Barinsky Estovar Corbin Duarte manager Duarte Jones Estovar Jones Jones Klinger Rensal klinger empl(X, Y) :- manager(X, Y). empl(X, Y) :- manager(X, Z), empl(Z, Y). ? empl(X, “Jones”). Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 Datalog에서 순환의 시맨틱 규칙들의 집합 R을 내포하고 있는 순환 프로그램의 뷰 릴레이션들이 반복 프로시저 Datalog-fixpoint에 의해 계산된 사실들의 집합 I를 내포하기 위해 정의된다. 프로시저의 끝에서 infer(R, I) = I이다. I를 프로그램의 고정점이라 한다. Datalog-Fixpoint는 프로그램내의 규칙에 부정문을 갖 지 않는 한 참인 사실만을 계산한다. procedure Datalog-Fixpoint I = set of facts in the database repeat Old_I = I I = I infer(R, I) until I = Old_I Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 순환의 능력 순환 뷰는 순환 또는 반복 없이는 작성할 수 없는 이행 폐포 질의와 같은 질의를 작성할 수 있도록 한다. I1 I2, Ev(I1) Ev(I2) (여기서, E는 V를 정의하는데 사용된 표현식)와 같은 두 개의 사실들의 집합 I1과 I2가 주어지면, 뷰 V를 단조롭다고 한다. 프로시저 Datalog-Fixpoint는 함수 infer가 단조로우면 건전하다. 연산자 , , , , , 및 만을 사용해 정의한 관계형 대수 뷰는 단조롭다. – 를 사용한 뷰는 단조롭지 않다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수