본문 바로가기
Major Review (학부)/Database

[DB] Ch05. 관계 대수와 관계 해석 (2)

by 삼준 2023. 4. 14.
반응형

2. 관계 해석

관계 해석은 원하는 정보가 무엇이라는 것만 선언하는 비절차적인 특성을 가지고 있음.

수학의 프레디킷 해석에 기반을 두고 있으며, 프레디킷이라 하는 것은 실행 결과가 반드시 참 또는 거짓이 되는 함수를 말함.

관계 해석에는 '튜플 관계 해석'과 '도메인 관계 해석'이 있고, 표현 방법의 차이는 있지만 표현 능력은 동등함.

 

2.1. 튜플 관계 해석

'튜플 해석'이라고도 함. 원하는 릴레이션을 튜플 해석식으로 정의하는 표기법.

2.1.1. 튜플 변수

'범위 변수'라고도 함. 지정된 릴레이션의 튜플을 하나 씩 값으로 취할 수 있는 변수임.

선언은 R(t)의 형식으로 하는데, t가 R의 튜플 변수이고 취하는 값의 범위는 릴레이션 R의 튜플로 한정한다는 것을 명세한다는 뜻임. 이때 R(t)를 튜플 변수 t의 '범위 식'이라 하고 R을 t의 '범위 릴레이션'이라 함.

2.1.2. 한정 애트리뷰트

t가 나타내는 튜플의 어떤 애트리뷰트 A의 값을 표현하기 위해 t.A 또는 t[A]로 표기함. t.A를 '한정 애트리뷰트'라고 함.

2.1.3. 원자식

세 가지 형태가 있음.

  • 범위식 - R(t)
  • 조건식 - t.A$\theta$u.B ($\theta$는 비교 연산자)
  • 조건식 - t.A$\theta$c (c는 상수)

2.1.4. 정형식

원자식, 불리언 연산자($\wedge ,\vee , ¬$) 그리고 정량자($\exists$ : there exists, $\forall $ : for all)가 다음과 같은 규칙에 따라 결합된 식을 정형식(WFF: Well Formed Formula) 라고 하고 'weff'라 읽음.

  1. 모든 원자식은 WFF임.
  2. F가 WFF이면 (F)와 ¬F도 WFF임.
  3. F와 G가 WFF이면 F$\wedge$G와 F$\vee$G도 WFF임.
  4. t가 자유변수로 사용된 F(t)가 WFF이면 ($\exists$t)(F(t))와 ($\forall$t)(F(t))도 WFF임. 자유 변수란 정량자($\exists$, $\forall$)로 한정되지 않은 튜플 변수를 말함. 정량자로 한정되었다면 속박 변수라 함. $\exists$는 존재 정량자라고 하며 정형식을 참으로 만드는 변수 t에 지정할 튜플이 적어도 하나는 존재한다는 의미임. $\forall $는 전칭 정량자라고 하며 변수 t에 지정하는 모든 튜플에 대해 정형식이 참이 된다는 의미임.
  5. 위 1~4의 규칙만을 적용해서 만들어진 식은 WFF임.

정량자가 사용된 논리식에서 정량자를 모두 앞으로 먼저 기술하는 방법이 있음. 이를 '프리닉스 정규형(Prenex Normal Form)'이라함. 

튜플 해석식을 공식적으로 정의하면 다음과 같음.

$$ \{ t_1.A_1,\space t_2.A_2,\space ...,\space t_n.A_n\space | F(t_1,\space t_2,\space ...,\space t_n,\space t_{n+1},\space t_{n+2},\space ...,\space t_{n+m} )\}$$

$t_i$는 튜플 변수이고 막대( | ) 오른편의 식은 $t_i$가 연관된 정형식으로 선정 조건임.

막대 왼편에 명세된 한정 애트리뷰트들의 값은 목표 리스트로서 막대 오른편의 정형식을 참으로 만드는 튜플들에서만 추출됨.

관계 해석식에서 목표 리스트에 명세될 수 있는 튜플 변수는 자유 변수인 것에 유의.

 

2.2. 도메인 관계 해석

'도메인 해석'이라고도 함. 사용자가 원하는 정보를 도메인 해석식으로 표현하는 방법. 튜플 관계 해석과 골격이 같고 튜플 변수 대신 도메인 변수를 사용함.

2.2.1. 도메인 변수

지정된 애트리뷰트의 도메인의 한 원소만을 값으로 취하는 변수임.

2.2.2. 원자식

세 가지 형태가 있음.

  • 범위식 - R(x1, x2, ..., xn)  (xi는 도메인 변수, R은 xi의 범위 릴레이션.)
  • 조건식 - x$\theta$y ($\theta$는 비교 연산자)
  • 조건식 - x$\theta$c (c는 상수)

원자식을 실행한 결과는 반드시 참이나 거짓임.

2.2.3. 정형식

정형식 조건은 튜플 관계 해석의 정형식 조건과 동일함.(2.1.4 참고)

도메인 해석식은 다음과 같은 형식임.

$$ \{ x_1,\space x_2,\space ...,\space x_n\space | F(x_1,\space x_2,\space ...,\space x_n,\space x_{n+1},\space x_{n+2},\space ...,\space x_{n+m} )\}$$

관계 해석식과 마찬가지로 목표 리스트에 명세될 수 있는 도메인 변수는 자유 변수여야 함.

 

3. QBE (Query By Example)

도메인 관계 해석을 기초로 한 관계 데이터 언어. 실행 결과가 테이블 형태로 표현되며 사용자로부터의 명령문도 화면의 테이블로 표현함. 테이블의 일부는 시스템에 의해 구성되고 일부는 사용자가 구성함. 테이블 형태로 명세되는 점 때문에 '2차원 구문' 언어라 함.

'P.' 은 프린트 명령으로, 프린트 시킬 목표, 즉 결과에 포함시킬 도메인을 표현함. 'P.' 뒤에 '예제 원소'를 붙여 복잡한 질의문에서 레코드 사이의 링크 역할을 하도록 할 수도 있음.

 

3.1. 데이터 검색

3.1.1. 단순 조건 검색

[질의] 서울에서 "USB"를 구매한 고객의 이름과 나이를 검색하라.

고객 이름 나이 주소 구매 상품명
  P. P. 서울 USB

QBE에서는 결과 테이블에 튜플이 중복되면 자동으로 제거함. 제거하지 않는걸 원한다면 P. 뒤에 'ALL' 키워드를 넣으면 됨. 정렬시키려면 P. 뒤에 'AO.'(오름차순)이나 'DO.'(내림차순)을 명세하면 됨.

고객 이름 나이 주소 구매 상품명
  P. ALL   서울 USB

3.1.2. 테이블 전체 검색

[질의] 고개 테이블을 전부 검색하라.

고객 이름 나이 주소 구매 상품명
P.        

테이블 이름 아래 P.을 명세하면 됨. 또는, 모든 필드에 P.을 명세해도 상관 없음.

3.1.3. 복수 조건 검색

[질의] 주소가 서울이거나 나이가 30살 이상인 고객의 이름을 검색하라.

고객 이름 나이 주소 구매 상품명
  P.   서울  
  P. ≥30    

상수 원소는 필드 값이 일치해야 될 동일 조건을 표현하지만 산술 비교식도 허용하며 논리 연산자도 허용함. 일반적으로  OR 조건은 두개의 행으로 표현하며, AND 조건은 한 행으로 표현함.

즉, "서울에 사는 30살 이상의 고객의 이름을 검색하라"는 다음과 같이 표현함.

고객 이름 나이 주소 구매 상품명
  P. ≥30 서울  

조건이 복잡한 경우 별도의 조건 상자로 뗴어내 명세할 수 있음.

고객 이름 나이 주소 구매 상품명
  P. _EAGE _EADDR  
CONDITIONS
_EAGE ≥ 30 AND _EADDR = 서울

3.1.4. 복수 테이블에서 검색

[질의] 서울에 살거나 30살 이상인 사람이 구매한 상품의 가격을 검색하라.

고객 이름 나이 주소 구매 상품명
      서울 _PRX
    ≥30   _PRY
상품 상품명 종류 가격
  _PRX   P.
  _PRY   P.

두 예제 원소 _PRX와 _PRY는 두 테이블을 연결하는 링크 역할을 함. 일반적으로 QBE에서 링크는 관계 대수의 조인과 같은 기능을 함.

 

3.2. 데이터의 삽입

3.2.1. 단순 레코드 삽입

[질의] 고객 테이블에 새로운 튜플로서 이름이 "세준"이고 나이가 23인 튜플을 삽입하라.

고객 이름 나이 주소 구매 상품명
I. 세준 23    

'I.'은 삽입 연산자임. 새로 삽입되는 튜플의 기본 키는 널이어서는 안되며 기존의 다른 키와 같아서는 안됨. 명세되지 않은 필드의 값들은 필드 정의에 따라 널, 0, 또는 공백 값을 가짐.

3.2.2. 튜플 검색을 이용한 삽입.

[질의] 테이블 "성인"이 이름 열로만 구성되어 있다고 하자. 20살 이상의 고객 이름을 "고객" 테이블로부터 검색해서 삽입하라.

성인 이름
I. _CN
고객 이름 나이 주소 구매 상품명
  _CN ≥20    

예제 원소 _CN은 성인 테이블과 고객 테이블을 연결 시키는 링크 역할을 함.

 

3.3. 데이터의 삭제

삭제를 할 때는 연산자 'D.'을 사용함.

3.3.1. 한 테이블에서 삭제

[질의] 이름이 "세준"인 고객을 "고객"테이블에서 삭제하라.

고객 이름 나이 주소 구매 상품명
D. 세준      

3.3.2. 복수 테이블에서의 레코드 삭제

[질의] 가격이 10000원 미만인 상품을 "상품"테이블에서 삭제하고, 이를 구매한 고객도 "고객"테이블에서 삭제하라.

상품 상품명 종류 가격
  _PRX   < 10000
D. _PRX    
고객 이름 나이 주소 구매 상품명
D.       _PRX

상품 테이블의 첫 번째 행에 있는 _PRX는 10000원 미만인 상품을 가르키고, 다음으로는 D. 연산자와 같이 표현된 _PRX와 링크 시킴.

 

3.4. 데이터의 갱신

'U.' 명령어를 사용함. 갱신할 필드는 기본 키가 아니어야 하고 갱신할 튜플은 반드시 기본 키로 명세되어야 함.

3.4.1. 필드 값의 단순 갱신

[질의] 이름이 "세준"인 고객의 나이를 24로 변경하라.

고객 이름 나이 주소 구매 상품명
  세준 U.24    
고객 이름 나이 주소 구매 상품명
U. 세준 24    

둘 다 가능함.

이름 "세준"은 기본 키 값으로 변경될 튜플을 식별하기 위해 사용됨.

3.4.2. 산술식을 이용한 갱신

[질의] 종류가 "식품"인 상품의 가격에 4000원을 가산하라.

상품 상품명 종류 가격
U.     _P+4000
    식품 _P

원래의 값을 예제로 표현한 뒤 갱신하기를 원하는 새로운 값을 표현함.

반응형

댓글