데이터베이스/관계 데이터 연산 (3)
2024-06-01 14:39:17

 관계 해석은 처리를 원하는 데이터가 무엇인지만 기술하는 비절차 언어로, 관계 대수처럼 관계 데이터 연산의 한 종류다. 데이터를 처리하는 기능과 처리를 요구하는 표현력에서 관계 대수와 관계 해석은 능력이 모두 동일하다. 관계 해석은 관계 데이터 모델의 제안자인 코드가 수학의 프레디킷 해석에 기반을 두고 제안했으며, 튜플 관계 해석과 도메인 관계 해석으로 분류된다. 자세한 내용은 챕터 7, 대표적 비절차 언어인 SQL을 통해 알아볼 수 있다.

'데이터베이스 > 관계 데이터 연산' 카테고리의 다른 글

관계 대수  (0) 2024.06.01
관계 데이터 연산의 개념  (0) 2024.06.01
2024-06-01 14:37:31

관계 대수의 개념과 연산자

 관계 대수는 원하는 결과를 얻기 위해 릴레이션을 처리하는 과정을 순서대로 기술하는 언어다. 이는 연산자들의 집합으로도 정의할 수 있다. 관계 대수는 릴레이션을 연산한다. 피연산자인 릴레이션에 연산자를 적용해 얻은 결과도 릴레이션이다. 이러한 관계 대수의 특성을 폐쇄 특성(closure property)이라 하는데, 이는 '콩 심은 데 콩 나고 팥 심은 데 팥 난다'는 속담을 떠올리게 된다.

 

 관계 대수에 속하는 대표적인 연산자 8개는 특성에 따라 일반 집합 연산자(set operation)와 순수 관계 연산자(relational operation)로 분류할 수 있다.

 

관계 대수 연산자의 종류

 

 

 일반 집합 연산자는 릴레이션이 튜플의 집합이라는 개념을 이용하는데 이는 수학의 집합 관련 연산자를 차용한 것이다.

 

1. 합집합(R ∪ S) : 릴레이션 R과 S의 합집합을 반환

 

 

2. 교집합(R ∩ S) : 릴레이션 R과 S의 교집합을 반환

 

 

3. 차집합(R - S) : 릴레이션 R과 S의 차집합을 반환

 

 

4. 카티션 프로덕트(R x S) : 릴레이션 R의 각 튜플과 릴레이션 S의 각 튜플을 모두 연결하여 만든 새로운 튜플을 반환

 

 

 순수 관계 연산자는 릴레이션의 구조와 특성을 이용하는 것으로 관계 데이터 모델에서 새로 제시된 연산자다.

 

1. 셀렉트(σ조건 R) : 릴레이션 R에서 조건을 만족하는 튜플들을 반환

 

 

2. 프로젝트(π속성리스트 R) : 릴레이션 R에서 주어진 속성들의 값으로만 구성된 튜플들을 반환

 

 

3. 조인(R ⋈ S) : 공통 속성을 이용해 릴레이션 R과 S의 튜플들을 연결하여 만든 새로운 튜플들을 반환

 

 

4. 디비전(R ÷ S) : 릴레이션 S의 모든 튜플과 관련이 있는 릴레이션 R의 튜플들을 반환

 

 

일반 집합 연산자

 이들을 살펴보기에 앞서 꼭 알아두어야 할 제약조건이 있다.

 

1. 일반 집합 연산자는 연산을 위해 피연산자 2개가 필요하다.

 

2. 합집합, 교집합, 차집합은 피연산자인 2개의 릴레이션이 합병 가능(union-compatible)해야 한다.

2-1. 두 릴레이션의 차수 즉, 속성 개수가 같아야 한다.

2-2. 2개의 릴레이션에서 서로 대응되는 속성의 도메인이 같아야 한다. 도메인이 같으면 속성의 이름은 달라도 된다.

 

 단 카티션 프로덕트는 합병 가능 여부와 상관없이 연산이 가능하다.

 

 

순수 관계 연산자

셀렉트

 셀렉트 연산은 하나의 릴레이션을 대상으로 수행한다. 조건식은 비교 연산자(>, >=, <, <=, =, =!)를 이용해 구성하는데, 조건식을 비교식 또는 프레디킷(predicate)이라고도 한다. 조건식을 속성과 상수의 비교로 구성할 때는 상수의 데이터 타입이 속성의 도메인과 일치해야 한다. 그리고 조건식을 다른 속성들 간의 비교로 구성할 때는 속성들의 도메인이 같아야 비교가 가능하다.

 

 비교 연산자와 함께 논리 연산자(∧, ∨, )를 사용해 조건식을 좀 더 복잡하게 구성할 수도 있다. 조건이 여러 개이고 이들을 모두 만족해야 하는 경우는 ∧(and)를, 이들 중 하나만 만족해도 되는 경우는 ∨(or)을 사용해 조건을 연결한다. 그리고 조건을 만족하지 않는 투플만 검색할 때는 ¬(not)을 사용한다.

 

 셀렉트 연산은 "릴레이션 where 조건식" 을 이용해 일반적인 데이터 언어의 형식으로도 표현할 수 있다.

 

프로젝트

 결과 릴레이션이 주어진 릴레이션의 일부 열로만 구성되어 해당 릴레이션에서 수직적 부분집합(vertical subset)을 생성하는 것과 같다. 프로젝트 연산을 한 결과 릴레이션에도 동일한 튜플이 중복되지 않고 한 번만 나타난다.

 

조인

 조인 속성은 두 릴레이션이 공통으로 가지고 있는 속성으로, 두 릴레이션이 관계가 있음을 나타낸다. 조인 연산한 결과 릴레이션은 피연산자 릴레이션에서 조인 속성의 값이 같은 튜플만 연결하여 만들어진 새로운 튜플을 포함한다.

 

 조인 연산의 결과 릴레이션에서 조인 속성은 중복되지 않고 한 번만 표현된다.

 

 조인 속성이 여러 개의 속성으로 구성되는 경우가 있는데, 이를 세타 조인이라고 한다. 세타 조인은 주어진 조인 조건을 만족하는 두 릴레이션의 모든 튜플을 연결한 새로운 튜플로 결과 릴레이션을 구성한다.

 

 세타 조인은 θ, 즉 비교 연산자를 이용해 다양한 조건을 표현할 수 있는데 θ 연산자가 '='인 세타 조인을 특별히 동일 조인(equi-join)이라고 한다. 일반 자연 조인의 결과 릴레이션과 달리 동일 조인의 결과 릴레이션에는 속성이 중복되어 나타난다. 그러므로 동일 조인의 결과 릴레이션에서 중복된 속성을 제거하면 자연 조인의 결과 릴레이션이 된다고 할 수 있다.

 

디비전

 디비전(division) 연산은 R ÷ S 로 표현하는데, 릴레이션 R이 릴레이션 S의 모든 속성을 포함하고 있어야 연산이 가능하다. 여기서 주의할 점은 속성의 이름이 같아야 하는 것이 아니라 속성의 도메인이 같아야 한다는 점이다.

 

관계 대수를 이용한 질의 표현

 사용자의 질의가 단순하여 앞서 살펴볼 예처럼 한 가지 연산자만으로 표현이 가능한 경우도 있지만 대부분 여러 연산자를 함께 사용해 복잡하게 표현되는 경우가 많다. 질의 하나가 여러 형태로 표현될 수 있으므로 다른 형태도 가능하다는 점을 알아두어야 한다.

 

확장된 관계 대수 연산자

 관계 대수가 처음 발표된 후 기본으로 제공되는 연산자를 확장한 연산자들이 계속 제안되었다. 이중 조인 연산을 확장한 세미 조인과 외부 조인을 살펴보자.

 

세미 조인

 두 릴레이션 R과 S의 세미 조인(semi-join) 연산은 R ⋉ S 로 표현한다. 이는 릴레이션 S의 조인 속성으로만 구성한(프로젝트한) 릴레이션을 릴레이션 R에 자연 조인하는 것이다.

 

먼저 릴레이션 S에 조인 속성인 속성으로 프로젝트 연산을 수행한 후, 이 결과 릴레이션과 릴레이션 R을 자연 조인하면 최종 결과를 얻을 수 있다. 결과적으로 세미 조인은 릴레이션 R에서 자연 조인 연산에 참여할 수 있는 튜플만 선택하여 결과 릴레이션을 구성한다. 이를 이용하면 검색에 불필요한 속성을 미리 제거하여 조인 연산의 비용을 줄일 수 있다. 하지만 세미 조인은 교환적 특성이 없기에 R ⋉ S 와 S ⋉ R 의 결과 릴레이션이 다르다는 점에 주의해야 한다.

 

외부 조인

 두 릴레이션 R과 S의 외부 조인(outer-join) 연산은 R ⋉+ S 로 표현한다. 이는 두 릴레이션에 자연 조인 연산을 수행할 때 조인 속성 값이 같은 튜플이 상대 릴레이션에 존재하지 않아 조인 연산에서 제외된 모든 튜플을 결과 릴레이션에 포함시킨다.

 

 자연 조인 결과와 달리, 일치하는 속성 값이 해당 테이블에 존재하지 않아 결과 릴레이션에서 제외되었던 릴레이션의 마지막 튜플이 결과 릴레이션에 포함되어 있다. 단 이 튜플은 해당 테이블과 관련된 릴레이션 S의 속성과 릴레이션 R의 속성을 널 값으로 처리한다. 결과적으로 외부 조인은 연산에 참여하는 두 릴레이션에 있는 모든 튜플을 결과 릴레이션에 포함시킨다.

'데이터베이스 > 관계 데이터 연산' 카테고리의 다른 글

관계 해석  (0) 2024.06.01
관계 데이터 연산의 개념  (0) 2024.06.01
2024-06-01 12:02:38

 관계 데이터 모델에서 연산은 원하는 데이터를 얻기 위해 릴레이션에 필요한 처리 요구를 수행하는 것으로, DB 시스템의 구성 요소 중 데이터 언어의 역할을 한다. 관계 데이터 모델의 연산을 간단히 관계 데이터 연산(relationship data operation)이라고도 한다. 대표적인 관계 데이터 연산으로 관계 대수와 관계 해석이 있다.

 

관계 데이터 연산의 종류

 

 

 관계 대수와 관계 해석은 원하는 데이터를 얻기 위한 처리 절차를 얼마나 자세히 기술하느냐에 큰 차이를 보인다. 관계 대수(relational algebra)는 원하는 결과를 얻기 위해 데이터의 치러 과정을 순서대로 기술하는 절차 언어(procedural language)다. 관계 해석(relational calculus)은 원하는 결과를 얻기 위해 처리를 원하는 데이터가 무엇인지만 기술하는 비절차 언어(noprocedural language)다.

 

 사용자 입장에서는 처리를 원하는 데이터가 무엇인지만 기술하는 비절차 언어가 편리하게 느껴질 수 있다. 하지만 데이터를 처리하는 기능과 처리를 요구하는 표현력에서 관계 대수와 관계 해석은 능력이 동등하다. 데이터에 대한 처리 요구를 일반적으로 질의(query)라 한다.

 

 새로운 데이터 언어가 제안되면 해당 데이터 언어의 유용성을 검증해야 하는데 검증의 기준 역할을 하는 것이 관계 대수와 관계 해석이다. 관계 대수나 관계 해석으로 기술할 수 있는 모든 질의를 새로 제안된 데이터 언어로 기술할 수 있으면 관계적으로 완전(relationally complete)하다고 하고, 이를 통해 해당 언어가 어느 정도 검증됐다고 판단한다.

'데이터베이스 > 관계 데이터 연산' 카테고리의 다른 글

관계 해석  (0) 2024.06.01
관계 대수  (0) 2024.06.01