관계 데이터 연산
관계 데이터 연산의 개념
- 데이터 모델 = 데이터 구조(data structure) + 연산(operation) + 제약조건(constraint)
관계 데이터 연산(relational data operation)
- 관계 데이터 모델의 연산.
- 원하는 데이터를 얻기 위해 릴레이션에 필요한 처리 요구를 수행하는 것.
- 관계 대수와 관계 해석이 있다.
- 기능과 표현력 측면에서 능력이 동등하다.
- 처리절차를 얼마나 자세히 기술하느냐에 따라 차이를 보인다.
- 관계 데이터 연산
- 관계 대수
원하는 결과를 얻기 위해 데이터의 처리 과정을 순서대로 기술 - 관계 해석
원하는 결과를 얻기 위해 처리를 원하는 데이터가 무엇인지만 기술
- 관계 대수
관계 대수(relational algebra)의 개념
- 원하는 결과를 얻기 위해 릴레이션의 처리 과정을 순서대로 기술하는 언어
- 절차 언어(procedural language)
- 릴레이션을 처리하는 연산자들의 모임
- 대표 연산자 8개
- 일반 집합 연산자와 순수 관계 연산자로 분류된다.
- 폐쇄 특성(closure property)이 존재한다
- 피연산자도 릴레이션이고 연산의 결과도 릴레이션이다.
관계 대수
- 관계 대수 연산자
- 일반 집합 연산자
- 합집합
- 교집합
- 차집합
- 카티션 프로덕트
- 순수 관계 연산자
- 셀렉트
- 프로젝트
- 조인
- 디비전
- 일반 집합 연산자
일반 집합 연산자(set operation)
릴레이션이 튜플의 집합이라는 개념을 이용하는 연산자
연산자 | 기호 | 표현 | 의미 |
---|---|---|---|
합집합 | \(\cup\) | \(R\cup S\) | 릴레이션 R과 S의 합집합을 반환 |
교집합 | \(\cap\) | \(R \cap S\) | 릴레이션 R과 S의 교집합을 반환 |
차집합 | \(-\) | \(R-S\) | 릴레이션 R과 S의 차집합을 반환 |
카티션 프로덕트 | \(\times\) | \(R\times S\) | 릴레이션 R의 각 튜플과 릴레이션 S의 각 튜플을 모두 연결하여 만들어진 새로운 튜플을 반환 |
특성
- 피연산자가 두개 필요하다.
- 두개의 릴레이션을 대상으로 연산을 수행한다.
- 합집합, 교집합, 차집합은 피연산자인 두 릴레이션이 합병이 가능해야 한다.
- 합병 가능(union-compatible)조건
- 두 릴레이션의 차수가 같아야 한다.
- 두 릴레이션에서 서로 대응되는 속성의 도메인이 같아야 한다.
- 합병 가능(union-compatible)조건
합집합(union)
합병 가능한 두 릴레이션 R과 S의 합집합
-
릴레이션 R에 속하거나 릴레이션 S에 속하는 모든 튜플로 결과 릴레이션을 구성한다.
\(R\) 번호 이름 100 A 200 B 300 C \(S\) 번호 이름 100 A 101 D 102 E \(R \cup S\) 번호 이름 100 A 200 B 300 C 101 D 102 E - 결과 릴레이션의 특성
- 차수는 릴레이션 R과 S의 차수와 같다.
- 카디널리티는 릴레이션 R과 S의 카디널리티를 더한 것과 같거나 적어진다.
합병시 중복은 하나로 표현한다.
- 교환적 특징이 있다.
\(R \cup S = S \cup R\) - 결합적 특징이 있다.
\((R \cup S) \cup T = R \cup (S \cup T)\)
교집합(intersection)
합병 가능한 두 릴레이션 R과 S의 교집합
-
릴레이션 R과 릴레이션 S에 속하는 모든 튜플로 결과 릴레이션을 구성한다.
\(R\) 번호 이름 100 A 200 B 300 C \(S\) 번호 이름 100 A 101 D 102 E \(R \cap S\) 번호 이름 100 A - 결과 릴레이션의 특성
- 차수는 릴레이션 R과 S의 차수와 같다.
- 카디널리티는 릴레이션 R과 S의 어떤 카디널리티보다 크지 않다.
- 교환적 특징이 있다.
\(R \cap S = S \cap R\) - 결합적 특징이 있다.
\((R \cap S) \cap T = R \cap (S \cap T)\)
차집합(difference)
합병 가능한 두 릴레이션 R과 S의 차집합
-
릴레이션 R에는 존재하고 릴레이션 S에는 존재하지 않는 튜플로 결과 릴레이션을 구성한다.
\(R\) 번호 이름 100 A 200 B 300 C \(S\) 번호 이름 100 A 101 D 102 E \(R - S\) 번호 이름 200 B 300 C \(S - R\) 번호 이름 101 D 102 E - 결과 릴레이션의 특성
- 차수는 릴레이션 R과 S의 차수와 같다.
- R차집합S의 카디널리티는 릴레이션 R의 카디널리티와 같거나 적다.
- S차집합R의 카디널리티는 릴레이션 S의 카디널리티와 같거나 적다.
- 교환적, 결합적 특징이 없다.
카티션 프로덕트(cartesian product)
두 릴레이션 R과 S의 카티션 프로덕트
-
릴레이션 R에 속한 각 튜플과 릴레이션 S에 속한 각 튜플을 모두 연결하여 만들어진 새로운 튜플로 결과 릴레이션을 구성한다.
\(R\) 번호 이름 100 A 200 B 300 C \(S\) 번호 나이 100 40 101 30 102 20 \(R \times S\) \(R\)번호 \(R\)이름 \(S\)번호 \(S\)이름 100 A 100 40 100 A 101 30 100 A 102 20 200 B 100 40 200 B 101 30 200 B 102 20 300 C 100 40 300 C 101 30 300 C 102 20 - 결과 릴레이션의 특성
- 차수는 릴레이션 R과 S의 차수를 더한 것과 같다.
- 카디널리티는 릴레이션 R과 S의 카디널리티를 곱한 것과 같다.
- 교환적 특징이 있다
\(R \times S = S \times R\) - 결합적 특징이 있다
\((R \times S) \times T = R \times (S \times T)\)
순수 관계 연산자(relational operation)
릴레이션의 구조와 특성을 이용하는 연산자
연산자 | 기호 | 표현 | 의미 |
---|---|---|---|
셀렉트 | \(\sigma\) | \(\sigma 조건(R)\) | 릴레이션 R에서 조건을 만족하는 튜플들을 반환 |
프로젝트 | \(\pi\) | \(\pi 속성리스트(R)\) | 릴레이션 R에서 주어진 속성들의 값으로만 구성된 튜플들을 반환 |
조인 | \(\bowtie\) | \(R \bowtie S\) | 공통 속성을 이용해 릴레이션 R과 S의 튜플들을 연결하여 만들어진 새로운 튜플들을 반환 |
디비전 | \(\div\) | \(R \div S\) | 릴레이션 S의 모든 튜플과 관련이 있는 릴레이션 R의 튜플들을 반환 |
셀렉트(select)
- 릴레이션에서 조건을 만족하는 튜플만 선택하여 결과 릴레이션을 구성
- 하나의 릴레이션을 대상으로 연산을 수행
- 수학적 표현법
\(\sigma 조건식(R)\)
괄호안의 릴레이션을 대상으로 조건식을 만족하는 튜플들을 골라낸다. - 데이터 언어적 표현법
릴레이션 where 조건식 - 조건식
- 비교식, 프레디킷(predicate)이라고도 한다.
- 속성과 상수의 비교나 속성들 간의 비교로 표현한다.
- 비교연산자와 논리연산자를 이용해 작성한다.
-
예시
고객 고객아이디 고객이름 나이 등급 직업 적립금 A 영희 20 gold 학생 1000 B 철수 25 vip 간호사 2000 C 민수 30 gold 교사 3000 D 영수 23 silver 학생 0 고객 릴레이션에서 등급이 gold인 튜플을 검색
-> \(\sigma 등급 = 'gold'(고객)\) 또는 where 등급=’gold’결과 고객아이디 고객이름 나이 등급 직업 적립금 A 영희 20 gold 학생 1000 C 민수 30 gold 교사 3000 결과 릴레이션은 연산 대상 릴레이션의 수평적 부분 집합이다.
고객 릴레이션에서 등급이 gold이고, 적립금이 2000이상인 튜플을 검색
-> \(\sigma 등급 = 'gold' \wedge 적립금 \geq 2000(고객)\) 또는 고객 where 등급=’gold’ and 적립금 \(\geq\) 2000 - 교환적 특징이 있다.
- \[\sigma 조건식1(\sigma 조건식2 (R)) = \sigma 조건식2(\sigma 조건식1 (R))\]
- \[\sigma 적립금 \geq 2000(\sigma 등급='gold' (고객)) = \sigma 등급='gold'(\sigma 적립금 \geq 2000 (고객)) = \sigma 등급='gold' \wedge 적립금 \geq 2000(고객)\]
프로젝트(project)
- 릴레이션에서 선택한 속성의 값으로 결과 릴레이션을 구성
- 하나의 릴레이션을 대상으로 연산을 수행
- 수학적 표현법
\(\pi 속성리스트(R)\) - 데이터 언어적 표현법
릴레이션[속성리스트] -
예시
고객 고객아이디 고객이름 나이 등급 직업 적립금 A 영희 20 gold 학생 1000 B 철수 25 vip 간호사 2000 C 민수 30 gold 교사 3000 D 영수 23 silver 학생 0 -
예시1
고객 릴레이션에서 고객이름, 등급, 적립금을 검색
-> \(\pi 고객이름,등급,적립금(고객)\) 또는 고객(고객이름,등급,적립금)결과 고객이름 등급 적립금 영희 gold 1000 철수 vip 2000 민수 gold 3000 영수 silver 0 결과 릴레이션은 연산 대상 릴레이션의 수직적 부분 집합이다.
-
예시2
고객 릴레이션에서 등급을 검색
-> \(\pi 등급(고객)\) 또는 고객(등급)결과 gold vip silver 중복은 하나만 표현한다.
-
조인(join)
- 조인 속성을 이용해 두 릴레이션을 조합하여 결과 릴레이션을 구성
- 조인 속성의 값이 같은 튜플만 연결하여 생성된 튜플을 결과 릴레이션에 포함
- 조인 속성
두 릴레이션이 공통으로 가지고 있는 속성
- 표현법
\(릴레이션1 \bowtie 릴레이션2\) - 자연 조인(natural join)이라고도 한다.
- 표현법
\(릴레이션1 \bowtie_N 릴레이션2\)
- 표현법
-
예시
고객 고객아이디 고객이름 나이 등급 A 철수 20 gold B 영희 30 vip C 민수 40 gold D 영수 50 silver 주문 주문번호 주문고객 주문제품 수량 101 A 우동 5 102 C 파이 10 103 B 만두 15 주문고객은 주문 릴레이션의 외래키이다.
고객 \(\bowtie\) 주문 고객아이디 고객이름 나이 등급 주문번호 주문제품 수량 A 철수 20 gold 101 우동 5 B 영희 30 vip 103 만두 15 C 민수 40 gold 102 파이 10 고객 릴레이션의 고객아이디 속성과 주문 릴레이션의 주문고객 속성에서 공통인 부분만 가져온다.
일반적으로 기본키와 외래키가 조인 속성으로 사용된다.
디비전(division)
- 표현법
\(릴레이션1 \div 릴레이션2\) - 릴레이션2의 모든 튜플과 관련이 있는 릴레이션1의 튜플로 결과 릴레이션을 구성한다.
- 단, 릴레이션1이 릴레이션2의 모든 속성을 포함하고 있어야 연산이 가능하다.
- 예시
-
예시1
고객 고객아이디 고객이름 나이 등급 직업 적립금 A 철수 20 gold 학생 1000 B 영희 30 vip 간호사 2000 C 민수 40 gold 교사 3000 D 영수 50 silver 학생 5000 우수등급 등급 gold 고객 \(\div\) 우수등급 고객아이디 고객이름 나이 등급 직업 적립금 A 철수 20 gold 학생 1000 C 민수 40 gold 교사 3000 -
예시2
주문내역 주문고객 제품이름 제조업체 A 우동 남양 C 파이 롯데 B 만두 남양 A 만두 남양 C 만두 남양 제품1 제품이름 우동 만두 제품2 제품이름 제조업체 만두 남양 주문내역 \(\div\) 제품1 주문고객 제조업체 A 남양 우동과 만두를 모두산 고객
주문내역 \(\div\) 제품2 주문고객 B A C 만두를 남양것을 구입한 고객
-
관계 대수를 이용한 질의 표현 예
고객 | |||
---|---|---|---|
고객아이디 | 고객이름 | 나이 | 등급 |
A | 철수 | 20 | gold |
B | 영희 | 30 | vip |
C | 민수 | 40 | gold |
D | 영수 | 50 | silver |
주문 | |||
---|---|---|---|
주문번호 | 주문고객 | 주문제품 | 수량 |
101 | A | 우동 | 5 |
102 | C | 파이 | 10 |
103 | B | 만두 | 15 |
주문고객은 주문 릴레이션의 외래키이다.
-
예시1
등급이 gold인 고객의 이름과 나이를 검색
-> \(\pi 고객이름,나이(\sigma등급='gold'(고객))\)결과 고객이름 나이 철수 20 민수 40 -
예시2
고객이름이 민수인 고객의 등급과, 민수 고객이 주문한 주문제품, 수량을 검색
-> \(\pi 등급,주문제품,수량(\sigma 고객이름='민수'(고객 \bowtie 주문))\)결과 등급 주문제품 수량 gold 파이 10 -
예시3
주문수량이 10개 미만인 주문 내역을 삭제
-> \(주문 - (\sigma 주문수량<10(주문))\)결과 주문번호 주문고객 주문제품 수량 102 C 파이 10 103 B 만두 15
연습문제
- 문제1
- 학생(학번, 이름, 학년)
- 과목(과목번호, 과목이름)
- 수강(학번, 과목번호, 중간성적, 기말성적, 학점)
- 모든 과목의 이름을 검색하는 질의문을 관계대수로 표현
\(\pi 과목이름(과목)\) - 1학년 학생의 학번과 이름을 검색하는 질의문을 관계 대수로 표현
\(\pi 학번,이름(\sigma 학년=1(학생))\) - 중간성적이 80점 이상이고 기말성적이 70점 이상인 학생의 학번과, 수강한 과목번호와 학점을 검색하는 질의문을 관계대수로 표현
\(\pi 학번,과목번호,학점(\sigma 중간성적 \geq 80 \wedge 기말성적 \geq 70(수강))\) - 모든 과목을 수강하고 있는 학생의 학번을 검색하는 질의문을 관계대수로 표현
\(\pi 학번,과목번호(수강) \div \pi 과목번호(과목)\) - 3번 과목에서 A0성적을 받은 학생의 이름과 학년을 검색하는 질의문을 관계대수로 표현
\(\pi 이름,학년(\sigma 과목번호=3 \wedge 학점='A0'(학생 \bowtie 수강))\)
- 문제2
- 고객(고객번호, 이름, 거주도시, 할인율)
- 판매자(판매자번호, 이름, 수수료)
- 제품(제품번호, 제품명, 재고량, 가격)
- 주문(주문번호, 고객번호, 제품번호, 판매자번호, 주문수량)
- 수수료가 5%미만인 판매자의 번호와 이름을 검색하는 질의문을 관계대수로 표현
\(\pi 판매자번호,이름(\sigma 수수료<5(판매자))\) - C001 고객이 주문한 P003 제품의 판매자 이름과 수수료를 검색하는 질의문을 관계대수로 표현
\(\pi 이름,수수료(\sigma 고객번호='C001' \wedge 제품번호='P003'(주문 \bowtie 판매자))\) - A003 판매자에게 주문하지 않은 고객의 이름을 모두 검색하는 질의문을 관계대수로 표현
\(\pi 이름(고객) - \pi 이름(\sigma 판매자번호='A003'(고객 \bowtie 주문))\) - 부산에 거주하는 모든 고객으로부터 주문을 받은 판매자의 번호를 검색하는 질의문을 관계대수로 표현
\(\pi 판매자번호,고객번호(주문) \div \pi 고객번호(\sigma 거주도시='부산'(고객))\)
Leave a comment