Skip to content
난이도 출제 빈출문제은행 6

관계대수와 관계해석 ​

관계대수(relational algebra)는 릴레이션(relation)을 입력으로 받아 새 릴레이션을 내놓는 연산의 모음이다. 원하는 결과를 얻기 위해 어떤 연산을 어떤 순서로 할지 적는 절차적 언어다. 실기 시험은 연산자 이름과 기호를 짝짓게 하고, 작은 표를 주고 결과의 차수(degree, 속성 수)·기수(cardinality, 튜플 수)나 디비전 결과를 묻는다. SQL의 WHERE·SELECT·JOIN이 모두 이 연산에서 나왔으므로 SQL 문제를 풀 때도 도움이 된다.

순수 관계 연산자 ​

순수 관계 연산자는 릴레이션 구조를 활용하는 연산이다. 행을 고르는지 열을 고르는지를 먼저 구분하면 헷갈리지 않는다.

연산기호하는 일
셀렉트(select)σ 시그마조건을 만족하는 튜플(tuple)만 고른다. 행을 자르므로 수평 연산
프로젝트(project)π 파이지정한 속성(attribute)만 뽑는다. 열을 자르므로 수직 연산
조인(join)⋈공통 속성을 기준으로 두 릴레이션을 하나로 합친다
디비전(division)÷S의 모든 값과 짝을 이루는 R의 튜플을 찾고 S의 속성은 뺀다

셀렉트는 SQL의 WHERE, 프로젝트는 SELECT 뒤 열 목록에 해당한다. 조인은 카티션 프로덕트(Cartesian product)를 만든 뒤 공통 속성 값이 같은 것만 셀렉트한 결과와 같다. 조건이 같음(=)이면 동등 조인, 동등 조인에서 중복된 공통 속성을 하나만 남기면 자연 조인(natural join)이다.

일반 집합 연산자 ​

일반 집합 연산자는 릴레이션을 튜플의 집합으로 보고 수학의 집합 연산을 그대로 쓴다. 합집합·교집합·차집합은 두 릴레이션의 속성 구성이 같아야 한다. 이 조건을 합병 가능(union compatible)이라고 한다.

연산기호결과 기수의 범위
합집합(union)∪두 기수의 합 이하, 중복은 제거
교집합(intersection)∩작은 쪽 기수 이하
차집합(difference)−왼쪽 릴레이션 기수 이하
카티션 프로덕트×차수는 두 차수의 합, 기수는 두 기수의 곱

카티션 프로덕트는 모든 튜플을 서로 한 번씩 짝지은 결과라 교차곱이라고도 한다. 속성은 옆으로 붙고 행은 모든 조합만큼 생기므로, 차수 3·기수 4인 R과 차수 2·기수 5인 S를 곱하면 차수 5, 기수 20이다.

계산 예제 ​

수강(학생, 과목) 릴레이션에 민수가 DB·OS·NET, 지아가 DB·OS, 태오가 DB·NET을 듣는 일곱 튜플이 있고, 필수 과목 릴레이션은 {DB, OS}라고 하자.

  • σ과목='DB'(수강)은 DB를 듣는 세 튜플이다. 차수는 그대로 2다.
  • π과목(수강)은 DB, OS, NET 세 튜플이다. 과목 값이 일곱 번 나오지만 중복이 사라진다.
  • 수강 ÷ 필수 과목은 DB와 OS를 둘 다 듣는 학생, 즉 민수와 지아다. 태오는 OS가 없어 빠진다. 결과에는 과목 속성이 빠지고 학생 속성만 남는다.
  • 필수 과목이 {DB, OS, NET}이면 결과는 민수 하나다.

관계해석 ​

관계해석(relational calculus)도 에드거 코드(Edgar F. Codd)가 제안했다. 관계대수가 구하는 방법을 적는다면, 관계해석은 원하는 결과가 무엇인지만 적는다. 그래서 비절차적 언어라고 한다. 수학의 술어 논리(predicate calculus)에 바탕을 두고 ∀·∃ 같은 정량자(quantifier)를 쓴다. 변수가 튜플을 가리키면 튜플 관계해석, 속성의 도메인(domain) 값을 가리키면 도메인 관계해석이다.

시험 포인트 ​

  • σ 셀렉트(행, 수평), π 프로젝트(열, 수직), ⋈ 조인, ÷ 디비전. 이 넷이 순수 관계 연산자.
  • ∪ ∩ − × 는 일반 집합 연산자.
  • 카티션 프로덕트: 차수는 더하고 기수는 곱한다.
  • 디비전 결과에는 나누는 쪽 릴레이션의 속성이 빠진다.
  • 관계대수는 절차적, 관계해석은 비절차적. 관계해석의 두 종류는 튜플·도메인 관계해석.

관련 문서