DB/DB Basic

[DB] 관계해석(Relational Calculus)

IT록흐 2021. 6. 24. 13:15
반응형

 

 

테이블이란 레코드로 이루어진 집합(SET)이다. 테이블에는 집합의 조건에 부합하는 레코드들만 저장될 수 있다. 집합의 표현법에는 여러가지가 있다. 원소나열법, 벤다이어그램 그리고 조건제시법. Oracle DBMS나 MYSQL DBMS는 원소나열법처럼 테이블의 레코드가 쭉 나열해서 보여준다.

 

관계질의어를 통해 테이블을 표현할 수도 있다. 관계질의어는 관계대수와 관계해석이 있다. 관계대수는 이전 포스팅에서 다루었다.

 

관계해석 (Relational Calculus)

 

관계해석은 조건제시법을 사용하여 테이블을 표현한다. 여기서 명제와 조건의 개념을 구분해야 한다. 명제는 참과 거짓이 구분되는 문장이다. 그리고 조건은 항상 참인 문장이다. 그러므로 명제가 참이 되면 조건이 된다. 관계해석은 명제를 참으로 만드는 레코드를 추출하는 것이다 .

 

집합 A = { x | 8이하의 짝수인 x는 자연수이다. }

 

중학교 1학년 때 배웠던 조건제시법이다. ' | ' 뒤에는 x 변수에 대한 명제가 들어있다. 명제를 거짓으로 만드는 x는 집합 A의 원소가 될 수 없다. 명제를 참으로 만드는 x들만이 집합 A의 원소가 된다.

 

이를 토대로, 테이블과 레코드 개념에 이해해보자.

튜플관계해석

출처 입력

테이블 B = { t.name, t.address | EMPLOYEE(t) AND t.SALARY > 500 }

*EMPLOYEE(t): 튜플범위, t.SALARY > 50000 : 튜플 명제

 

 

튜플관계해석식을 살펴볼 때는 두 가지를 중점으로 봐야한다.

 

첫 번째는 튜플의 범위이다.

 

t는 레코드(튜플)를 의미하는 변수이다. 그러므로 EMPLOYEE(t)의 의미는 레코드가 EMPLOYEE 테이블의 레코드임을 의미한다. 이로써 레코드의 범위가 정해졌다.

 

두 번째는 튜플의 명제이다.

 

명제가 참이면 조건이 된다. 직원테이블 안의 레코드들 중 명제를 조건으로 만드는 레코드들이 테이블 B를 구성하게 된다. 위 식에서 명제는 월급 500만원 이상인가? 이다. EMPLOYEE 레코드들 중 월급이 500만원 이상인 직원레코드가 테이블 B를 구성한다.

 

 

튜플 관계해석의 JOIN 연산

 

JOIN연산은 동등조건을 토대로 서로 다른 테이블의 레코드를 연결하는 관계대수 연산을 의미한다. 그러므로 관계해석도 동등조건을 명제로 제시하여 JOIN을 표현할 수 있다. 그렇다면 명제에는 두 가지 종류의 튜플이 등장한다. 예를들어, 위에서 본 관계해석식 튜플이 하나밖에 안 나온다.

 

테이블 B = { t.name, t.address | EMPLOYEE(t) AND t.SALARY > 500 }

 

위 관계해석식은 t가 유일한 튜플이다. 그렇다면 여기에 튜플을 하나 더 추가해보자. 이렇게 표현해보자.

 

테이블 B = { t.name, t.address, d.dept_name | EMPLOYEE(t) AND DEPARTMENT(d) AND d.dept_name = 'RESEARCH' AND t.dept_id = d.dept_id }

 

- 튜플변수 : t , d

- 튜플범위 : EMPLOYEE(t) AND DEPARTMENT(d)

- 명제 : d.dept_name = 'RESEARCH' AND t.dept_id = d.dept_id

- 동등조건 : t.dept_id = d.dept_id

 

EMPLOYEE(t) AND DEPARTMENT(d) 범위에 있는 레코드들 중 명제를 참으로 만드는 레코드들만이 추출되어 테이블 B를 구성한다. 이제부터 정량자(quantifier)의 개념이 등장한다.

 

정량장(quantifier)

 

정량자는 두 가지로 나뉜다. '모든 튜플'을 의미하는 전체 정량자(universal quantifier), '적어도 하나의 튜플'을 의미하는 존재 정량자(existential quantifier)가 있다.

 

1. 전체 정량자(Universal quantifier), 

 

'모든' 고등학생은 떡볶이를 좋아한다.

 

해당 명제는 고등학생 전부가 떡볶이를 좋아해야 '참'이 된다. 만약 단 한명이라도 떡볶이를 싫어하면 명제는 거짓이 된다. 다시 말해서, 전체 고등학생이 좋아해야 명제는 조건이 된다.

 

2. 존재 정량자( Existential Quantifier), 

 

무한도전의 멤버 중 어떤 한 명이라도 미션에 성공하면 촬영을 끝내겠다.

 

무한도전 하와이 특집 때 제작진이 무한도전 멤버들에게 주었던 명제이다. 유재석, 박명수 , 정준하, 정형돈, 하하, 노홍철, 길 중 어떤 멤버든 간에 미션을 성공하면 해당 명제는 참이 되어 촬영이 끝난다. 유재석이 미션에 실패해도 길이가 성공하면 촬영이 끝난다. 그러므로 전체 멤버 중 하나라도 성공해야 명제는 조건이 된다.

 

그러면 한 가지 의아한 점이 생긴다. 튜플 각각의 결과는 의미없고 튜플 전체의 결과에 따라 명제의 참과 거짓이 바뀐다면 이는 무슨 의미가 있을까? 이는 JOIN 연산에서 의미가 생긴다.

 

관계해석에서 튜플 변수가 2개 이상 나오면, 거의 대부분이 JOIN연산이다. 두 개의 테이블 레코드를 연결하기 위해 튜플변수 두 개를 사용하기 때문이다. 그렇다면 위에서 JOIN 연산을 설명하며 사용했던 관계해석식을 다시 갖고 와보자.

 

테이블 B = { t.name, t.address, d.dept_name | EMPLOYEE(t) AND DEPARTMENT(d) AND d.dept_name = 'RESEARCH' AND t.dept_id = d.dept_id }

 

- 튜플변수 : t , d

- 튜플범위 : EMPLOYEE(t) AND DEPARTMENT(d)

- 명제 : d.dept_name = 'RESEARCH' AND t.dept_id = d.dept_id

- 동등조건 : t.dept_id = d.dept_id

 

이 관계해석은 RESEARCH 부서에서 일하는 직원 레코드를 추출하여 테이블 B를 만들기 위해 존재한다. 여기서 튜플변수 d에게 정량자를 씌우는 것이다. 존재 정량자를 씌웠다고 가정해보자.

 

테이블 B = { t.name, t.address | EMPLOYEE(t) AND (d) ( DEPARTMENT(d) AND d.dept_name = 'RESEARCH' AND t.dept_id = d.dept_id ) }

 

초록색은 명제이다. 다시 말하면 부서테이블의 레코드(d)들 중 단 하나라도 해당 명제를 참으로 만드는 것이 있어야 초록색 명제가 조건이 된다. 만약 부서레코드 중 RESEARCH 이름을 가진 부서가 없거나 직원레코드와 동등조건을 만족는 레코드가 단 한 개라도 없으면 초록색 명제는 거짓이 되어 관계해석식은 직원레코드(t)를 추출하지 못한다.

 

이를 정리하면, t 레코드 중 명제에 참인 레코드만 테이블에 추가되어야 하는데, 명제 안에 동등조건이 있어서 다른 테이블의 튜플(d)도 관계해석 안에 포함되었다. 그래서 가장 먼저 튜플 d 전체에서 해당 명제에 참인 레코드가 있는지 여부를 먼저 판단해야 한다는 의미다. Reasearch 부서가 부서 안에 있어야 Research 부서의 직원레코드를 추출이 가능하지, Research 부서가 부서레코드에 없는데 Research 부서의 직원레코드를 추출한다는 것은 어불성설이기 때문이다.

 

여기서 튜플변수 t를 자유 튜플 변수라고 부른다. 그리고 튜플변수 d는 속박 튜플 변수라고 부른다. 둘의 차이는 무엇일까?

 

속박(bound) VS 자유(free)

 

자유튜플변수의 레코드

 

자유튜플 변수의 레코드들은 각자의 명제 판별 결과에 따라 운명이 달라진다. 어떤 레코드는 명제에 참이여서 테이블에 저장되고 어떤 레코드는 명제가 거짓이여서 테이블에 포함되지 않는다. 이처럼 레코드가 각자의 명제 판별 결과에 따라 운명이 달라지는 것을 두고 자유(Free)롭다고 말한다.

 

전체정량자 속박튜플변수의 레코드

 

속박튜플변수의 레코드들은 개별적인 참과 거짓의 결과가 의미가 없다. 전체적으로 봤을 때 거짓이 있으면 전체정량자의 경우, 명제를 거짓으로 판별한다. 이렇듯 레코드가 개별적인 결과가 아닌 레코드 전체의 결과에 따라 달라지므로 해당 레코드들을 속박(Bound)되어 있다고 표현한다.

 

 

관계해석의 목적은 자유 튜플 변수 t 중 명제에 부합하는 레코드를 테이블에 추가하는 것이다. 하지만 여기에 동등 조건과 정량자가 쓰이면서 또 다른 튜플변수 d가 추가되었다. 그러므로 튜플 d 전체에서 해당 명제에 참이라면 동등조건이 이루어지므로 관계해석은 표현될 수 있지만 만약 거짓이라면 동등조건이 성립 안 되므로 관계해석식은 테이블을 표현할 수 없다.

 

 

안전식 (Safe Expresstion)

 

관계해석은 안전식으로 표현되어야 한다. 안전식이란 관계해석으로 추출되는 레코드가 유한해야하고 같은 종류여야함을 의미한다. 추출되는 레코드가 무한하고 여러 종류의 레코드라면 불안전한 식이라고 말한다.

 

 

 


참고자료

 

Understanding of Database

저자 : 이상구, 장재영, 김한준, 정재헌

출판 : 이한미디어발매2012.08.20.

 

 

 

반응형

'DB > DB Basic' 카테고리의 다른 글

[DB] SQL1 (Oracle)  (0) 2021.06.25
[DB] Oracle의 구조  (0) 2021.06.24
[DB] 관계형 데이터 모델  (0) 2021.06.24
[DB] 파일시스템  (0) 2021.06.24
[DB] 데이터베이스의 정의  (0) 2021.06.24