관계 데이터베이스의 언어

  • 관계 대수의 배경 : 먼저 SQL이란 Structure Query Language의 약자로, 데이터베이스에서 질의를 위해 사용되는 언어입니다. 과거에는 이 SQL문 대신 관계 대수라는 것을 이용하였습니다. 관계 대수는 상용 관계 DBMS들에서 널리 사용되는 SQL의 이론적인 기초이면서, SQL을 구현하고 최적화하기 위해 오늘날 DBMS의 내부 언어로서도 사용됩니다.
  • 관계 데이터 모델에서 지원되는 두 가지 정형적인 언어

- 관계 해석 (Relational calculus) : 원하는 데이터만 명시하고 질의를 어떻게 수행할 것인지는 명시하지 않는 선언적인 언어

- 관계 대수 (Relational algebra) : 어떻게 질의를 수행할 것인가를 명시하는 절차적 언어

  •  SQL (Structure Query Language)

- 상용 관계 DBMS들의 사실상의 표준 질의어

- 사용자는 SQL을 사용하여 관계 데이터베이스에 릴레이션을 정의하고, DB의 정보를 검색하고, 관계 데이터베이스를 갱신하는 등 여러 가지 무결성 제약조건들을 명시할 수 있다.



  관계 대수의 특징

  • 기존의 릴레이션들로부터 새로운 릴레이션을 생성한다.
  • 릴레이션이나 관계 대수식의 결과 릴레이션에 연산자들을 적용하여 보다 복잡한 결과 릴레이션을 점차적으로 만들 수 있다.
  • 기본적인 연산자들의 집합으로 이루어진다.
  • 산술 연산자와 유사하게 단일 릴레이션이나 두 개의 릴레이션을 입력으로 받아 하나의 결과 릴레이션을 생성한다.
  • 결과 릴레이션은 또 다른 관계 연산자의 입력으로 사용될 수 있다.



  관계 연산자들의 종류와 표기법


분류

연산자

표기법

단항 또는 이항

필수적인 연산자

실렉션 (Selection)

단항

프로젝션 (Projection)

단항

합집합 (Union)

이항

차집합 (Difference)

이항

카티션 곱 (Cartesian Product)

이항

편의를 위해 유도된 연산자

교집합 (Intersection)

이항

세타 조인 (Theta Join)

이항

동등 조인 (Equijoin)

이항

자연 조인 (Natural Join)

*

이항

세미 조인 (Semijoin)

이항

디비전 (Division)

이항


  • Selection 연산자

- 한 릴레이션에서 실렉션 조건(Selection Condition 또는 Predicate)을 만족하는 투플들의 부분 집합을 생성하는 연산자. - 투플이 여러 개 있으나 중복 투플은 존재할 수 없다.

- 결과 릴레이션의 차수는 입력 릴레이션의 차수(열의 수)와 같다.

- 결과 릴레이션의 카디날리티(행의 수)는 항상 입력 릴레이션 것보다 작거나 같다.

- 실렉션 조건은 보통 릴레이션의 임의의 컬럼과 상수, 비교연산자[ =, <>, <=, <, =>, > ], 부울 연산자[ AND, OR, NOT ]를 포함한다.


  • Projection 연산자

- 한 릴레이션의 애트리뷰트들의 부분 집합을 구하는 연산자

- 결과로 생성되는 릴레이션은 스키마에 명시된 애트리뷰트들만 가진다.

- 결과 릴레이션에는 기본 키가 아닌 애트리뷰트에 한하여 중복된 투플들이 존재할 수 있다.



  • 집합 연산자

- 릴레이션이 투플들의 집합이기 때문에 기존의 집합 연산이 릴레이션에 적용된다.

- 합집합(Union), 교집합(Intersection), 차집합(Difference) 연산자

- 집합 연산자의 입력으로 사용되는 두 개의 릴레이션은 합집합 호환이어야 한다.

- 합집합 호환 (Union Compatible) : 집합 연산의 조건으로, 정의는 아래와 같다.

- 두 릴레이션 R1(A1, A2, ..., An)R2(B1, B2, ..., Bm)이 합집합 호환일 필요 충분 조건은 n=m이고, 모든 1<=i<=n에 대해 domain(Ai)=domain(Bi)

- 쉽게 말해, 컬럼 수가 동일해야 하고 스키마에서 정의한 컬럼의 데이터 타입이 동일해야 한다.

- 프로젝션 연산의 결과도 릴레이션이므로 합집합 호환이 된다면 두 결과 릴레이션은 집합 연산이 가능하다.

  • Union 연산자

- 두 릴레이션 RS의 합집합 R S R 또는 S에 있거나 RS 모두에 속한 투플들로 이루어진 릴레이션이다.

- 결과 릴레이션에서 중복된 투플들은 제외된다.

- 결과 릴레이션의 차수는 R 또는 S의 차수와 같으며, 애트리뷰트의 이름들은 R 또는 S의 애트리뷰트들의 이름과 같다.



  • Intersection 연산자

- 두 릴레이션 RS의 교집합 R S RS 모두에 속한 투플들로 이루어진 릴레이션이다.

- 결과 릴레이션의 차수는 R 또는 S의 차수와 같으며, 결과 릴레이션의 애트리뷰트 이름들은 R 또는 S의 애트리뷰트들의 이름과 같다.



  • Difference 연산자

- 두 릴레이션 RS의 차집합 (R - S) R에는 속하지만 S에는 속하지 않은 투플들로 이루어진 릴레이션이다.

- 결과 릴레이션의 차수는 R 또는 S의 차수와 같으며, 결과 릴레이션의 애트리뷰트 이름들은 R 또는 S의 애트리뷰트들의 이름과 같다.



  • Cartesian Product 연산자

- 카디날리티가 i인 릴레이션 R(A1, A2, ..., An)과 카디날리티가 j인 릴레이션 S(B1, B2, ..., Bm)의 카티션 곱 R S 는 차수가 (n+m)이고, 카디날리티가 (i*j)이고, 애트리뷰트가 (A1, A2, ..., An, B1, B2, ..., Bm)이며, RS의 투플들의 모든 가능한 조합으로 이루어진 릴레이션이다.

- 카티션 곱의 결과 릴레이션의 크기는 매우 클 수 있으며, 사용자가 실제로 원하는 것은 카티션 곱의 결과 릴레이션의 일부인 경우가 대부분이므로 카티션 곱 자체는 유용한 연산자가 아니다.



  • 조인 연산자

- 두 개의 릴레이션으로부터 연관된 투플들을 결합하는 연산자

- 관계 데이터베이스에서 두 개 이상의 릴레이션들의 관계를 다루는데 매우 중요한 연산자이다.

  • 세타 조인 (Theta Join) 과 동등 조인 (Equijoin)

- 두 릴레이션 R(A1, A2, ..., An)S(B1, B2, ..., Bm)의 세타 조인의 결과는 차수가 (n+m)이고, 애트리뷰트가 (A1, A2, ..., An, B1, B2, ..., Bm)이며, 조인 조건을 만족하는 투플들로 이루어진 릴레이션이다.

- 세타 조인 조건은 { =, <>, <=, <, >=, > } 중 하나이다.

- 동등 조인 조건은 세타 조인 중에서 비교 연산자가 =인 조인이다.



  • 자연 조인 (Natural Join)

- 동등 조인의 결과 릴레이션에서 조인 컬럼의 중복을 제외한 조인

- 여러 가지 조인 연산자들 중에서 가장 자주 사용된다.

- 실제로 관계 데이터베이스에서 대부분의 질의는 실렉션, 프로젝션, 자연 조인으로 표현 가능하다.



  • Division 연산자

 차수가 (n+m)인 릴레이션 R(A1, A2, ..., An, B1, B2, ..., Bm)과 차수가 m인 릴레이션 S(B1, B2, ..., Bm)의 디비전 R  S는 차수가 n이고, S에 속하는 모든 투플 u에 대응하는 투플 tu(투플 t와 투플 u가 결합한 것)가 R에 존재하는 투플 t들의 집합



  

  관계 대수의 한계

  • 관계 대수는 산술 연산을 할 수 없다.
  • 정렬을 나타낼 수 없다.
  • 데이터베이스를 수정할 수 없다. -> 레코드 삽입, 삭제, 수정이 불가능
  • 프로젝션 연산의 결과에 중복된 투플을 나타내는 것이 필요할 때가 있는데 이를 명시하지 못한다.
 

  추가된 관계 대수 연산자

  • 집단 함수

질의 : 모든 사원들의 급여의 평균은 얼마인가?


  • 그룹화

질의 : 각 부서별 사원들의 급여의 평균은 얼마인가?


  • 외부 조인

- 상대 릴레이션에서 대응되는 투플을 갖지 못하는 투플이나 조인 컬럼에 널값이 들어 있는 투플들을 다루기 위해서 조인 연산을 확장한 조인이다.

- 두 릴레이션에서 대으오디는 투플들을 결합하면서, 대응되는 투플을 갖지 않는 투플과 조인 컬럼에 널값을 갖는 투플도 결과에 포함시킨다.






+ Recent posts