본문 바로가기
전공수업/데이터베이스 [DB]

제 6장] 관계 데이터 연산

by wonseok99 2019. 10. 17.

관계 데이터 모델에서 연산은 원하는 데이터를 얻기 위해 릴레이션에 필요한 처리 요구를 수행하는 것이다. 관계 데이터 모델의 연산을 간단하게 관계 데이터 연산이라고도 한다.

관계 데이터 연산 - [ 관계 대수 ]  원하는 결과를 얻기 위해 데이터의 처리 과정을 순서대로 기술.

 그리고 데이터에 대한 처리 요구를 일반적으로 질의querry 라고 하며 이는 7장에서도 등장하는 개념이다. 그리고 새로운 데이터 언어가 제안되었을때 해당 데이터의 언어 유용성을 검증하는데의 기준이 되는것이 관계 대수와 관계 해석이다. 

관계 대수나 관계 해석으로 질의를 새로 제안된 데이터 언어로 기술할 수 있으면 관계적으로 완전하다고 할 수 있으며 어느정도 검증된 언어라고 볼 수 있다.

Ex ] 판매 데이터베이스에서 아이디가 banana인 고객의 주문제품의 제품명과 제조업체를 가져오시오.

[mainquerry] SELECT  제품명, 제조업체    FROM 제품    WHERE 제품번호 IN (SELECT 주문제품    FROM 주문    WHERE 주문고객 = 'banana'); [subquerry]

이처럼 SQL을 통해 원하는 결과를 얻기 위해 데이터의 처리과정을 언어로 기술할 수 있으므로 SQL은 검증된 데이터 언어라고 볼 수 있다.

 

 

1] 관계 대수

 

1.1 관계대수의 개념

 관계 대수는 원하는 결과를 얻기 위해 릴레이션을 처리하는 과정으로 순서대로 기술하는 언어다. 연산자들의 집합으로도 정의할 수 있으며 일반적으로 연산자와 함께 연산의 대상이 되는 피연산자가 있으며 관계대수에서는 피연산자가 릴레이션이다. = [ 관계 대수는 릴레이션을 연산하기 위한 대수 ]

합집합  /  교집합  /  차집합  /  는 일반 집합과 똑같기 때문에 따로 서술하지 않겠다.

- 카티션 프로덕트 : 릴레이션 A의 각 투플과 릴레이션 B의 각 투플을 모두 연결하여 만들어진 새로운 투플을 반환. 

- 셀렉트 : 릴레이션 A에서 조건을 만족하는 투플들을 반환 [ SELECT ]

- 프로젝트 : 릴레이션 A에서 주어진 속성들의 값으로만 구성된 투플들을 반환 [ 7장에서 등장하는 뷰view 와 비슷한 기능(?) ]

- 조인 : 공통 속성을 이용해 릴레이션 A와 B의 투플들을 연결하여 만들어진 새로운 투플들을 반환 [ 외래키 참조하는 경우 ]

- 디비전 : 릴레이션 B의 모든 투플과 관련이 있는 릴레이션 A의 투플들을 반환

 

합집합  /  교집합  /  차집합  /  카티션 프로덕트  는 일반 집합 연산자라고 하며 연산에 제약이 존재하는데 바로

  1. 두 릴레이션의 차수 [속성] 의 개수가 같아야한다.
  2. 2개의 릴레이션에 서로 대응되는 속성의 도메인이 같아야 한다. [ 도메인만 ]

 예외적으로 카티션 프로덕트는 두개의 릴레이션을 말 그대로 합병하는것으로 이러한 제약이 없어도 연산이 가능하다. 카디션 프로덕트는 연산을 한 다음 어느 릴레이션 소속인지 표기를한다. 다만 속성의 이름이 중복되지 않는경우에는 소속을 표기하지 않아도 된다.

 

 

셀렉트  /  프로젝트  /  조인  /  디비전 은 순수 관계 연산자라고 하며 릴레이션에 저장되어 있는 데이터를 다양하게 처리해주며 자주 사용된다.  [ 7장에서 자세하게 살펴보자 ]

  • 셀렉트는 릴레이션에 조건식을 적용하여 참이되는 투플들만 선택한다. 수평적 부분집합 [ SELECT 문 ] 
  • 프로젝트는 릴레이션에서 선택한 속성값만 선택하여 구성한다. 수직적 부분집합 [ FROM 문 ]
  • 조인은 릴레이션 하나로 우너하는 데이터를 없을 때 관계가 있는 여러 릴레이션을 함께 사용하는경우이다. 두 릴레이션을 조합하여 하나의 결과 릴레이션을 구성 
  • 디비전은 A / B 로 표현되며 릴레이션 B의 모든 투플과 관련있는 릴레이션 A의 투플로 결과 릴레이션을 구성하는것이다. 단 릴레이션 A가 릴레이션 B의 모든 속성을 포함하고 있어야 연산이 가능하다.  [ 도메인이 같은 속성을 말하는것 ]