본문 바로가기

데이터베이스기초

[데이타베이스기초] 5장 관계 대수

관계 데이타 연산

결과 릴레이션의 크기는 해당 릴레이션에 포함된 튜플의 수를 말합니다.

-> 릴레이션 r의 카디널리티 3, 릴레이션 s의 카디널리티 5일 때 자연 조인 시 결과 릴레이션의 최대 크기가  5

  • 시스템 입장에서 연산, 사용자 입장에서 데이타 언어를 사용합니다. 사용자가 데이타 언어로 입력 -> 시스템이 연산

1. 관계 데이타 언어

  • 관계 데이터에는 연산(처리)을 위한 언어가 존재한다.
  • 관계 연산 = 주어진 릴레이션으로부터 필요한 릴레이션을 만드는 연산자
  • 그것은 정형어라 부르며 관계 대수와 관게 해석 두개로 나뉜다.(Regular expression)

**정형어란?

관계형 데이터베이스에서 데이터를 조회, 수정, 삭제, 추가 등을 수행하기 위해 사용되는 구조화된 쿼리 언어

  • 관계 해석과 관계 대수는 표현과 기능 면에서는 동등하다. 표현 방법만 다르다 !!!!!
  • 그러나 형태가 다르며 보통은 관계 해석보다는 관계 대수를 위주로 공부한다.
  • 관계 데이터베이스에서는 관계(릴레이션) 간의 데이터를 조작하고 처리하기 위해 다양한 연산을 사용할 수 있습니다

(1) 관계 해석 

  • 비절차적 언어이며, WHAT만 명세되어 있다
  • 튜플 관계 해석
  • 도메인 관계 해석

(2) 관계 대수

  • 절차 언어이며, HOW(어떻게)와 WHAT(무엇을)만 명세되어 있다. - 방법(순서), 얻고자하는 것(결과값)

 

관계 대수 = 일반 집합 연산자 + 순수 관계 연산자

  • 릴레이션(튜플들의 집합)을 처리하기 위한 연산의 집합이다.
  • 집합이기 때문에 폐쇄 성질을 가지고 있다.
  • 즉 정수 + 정수 = 정수라할때 정수들은 덧셈 연산에 닫혀 있다고 하는 것 처럼, 관계 대수 역시 피연산자와 결과 모두 릴레이션이어야 한다. 
  • 중첩된 수식의 표현이 가능
  • 일반 집합 연산자 + 순수 관계 연산자

 

1. 일반 집합 연산자 - 수학적 집합 이론

  • 카티션 프로덕트를 제외하고 합병 가능해야 합니다. 차집합 시험 범위 제외
  • t는 투플

(1) 합집합(Union, U)

RS  { t | tR  tS } * t : Tuple, R U S의 원소임.

|RS| ≤ |R| + |S| -> |R∪S| = |R| + |S| 인 경우는 교집합이 존재하지 않을 때.

(2) 교집합 (intersect,∩)

RS  { t | tR  tS }

|RS|  min{ |R|, |S| } -> { |R|, |S| }가 최소값일 때 : 하나의 R이 다른 하나의 R에 포함될 때

릴레이션 R과 S의 교집합의 크기가 R과 S의 크기 중 작은 값보다 작거나 같다

 

(3) 카티션 프로덕트(Cartesian Product, X)(Product - 곱 집합)

R×S  { r·s | rR  sS } : · 접속(concatenation)

|R×S| = |R|×|S|

** 차수(Degree) : 애트리뷰트(속성)의 개수 = R의 차수 + S의 차수

** 카디널리티 : 튜플(레코드)의 개수 = R의 카디널리티*S의 카디널리티

 

** 일반 집합 연산자의 특징(합병 가능, 교환적, 결합적)

  • 합병 가능한 릴레이션(합집합, 교집합, 차집합) : 합병이란, 2개의 릴레이션을 합쳐서 하나의 릴레이션으로 만드는 행위이다.
  • 이때 1> 차수(애트리뷰트의 수)가 동일해야 하며 2> 대응 애트리뷰트 쌍 별로 도메인이 같아야 한다는 전제조건을 갖는다. 
  • 애트리뷰트의 이름까지 같을 필요는 없다 !!
  • 결합적 속성(합집합, 교집합, 카티션 프로덕트) : R U S U T = (R U S) U T = R U (S U T) 
  • 교환적 속성(합집합, 교집합, 카티션 프로덕트) : R U S = S U R, R ∩ S = S ∩ R
  • 차집합은 결합적이지도, 교환적이지 않다. 

 

2. 순수 관계 연산자  - 순수하게 릴레이션을 위한 연산자 - 디비전 X

  • 순수 관계 연산자는 릴레이션에 대해서만 동작하는 연산자로, 릴레이션의 내용을 변경하지 않고 릴레이션에 대한 조작을 수행합니다. 

(1) 셀렉트(Select, Sigma ∂)="행의집합"

  • A, B은 릴레이션 R의 애트리뷰트일때 AθB를 만족시키는 연산을 말한다. 
  • 연산 결과는 투플의 집합임.
  • θ는 비교 연산자(>=, >,< , !=, =..), v는 상수
  • 표기 형식 : σ(조건)(R)
  •  σ AθB (R) 
  • σ Aθv (R)
  • 셀렉트의 결과는 선택 조건을 만족하는 릴레이션의 수평적 부분집합
  • ∂Dept = '컴퓨터'(Student) (시그마 애트리뷰트 = 조건 내용(테이블))
  • A와 B를 비교하기 위해서 두 속성의 도메인은 동일해야 한다.
  • 셀렉트는 DML로 따지자면 Select 구문과 동일하다.
  • 셀렉트 역시 결합적인 성질을 가지고 있다.
  • 릴레이션에서 주어진 조건을 만족하는 투플들을 선택하는 연산.
  • 데이터 언어 형식의 표현 R WHRER 조건식
  • 선택도? 선택 조건에 의해 검색되는 투플의 비율 전체: 투플
  • 예를 들어, 선택 조건이 "나이가 30살 이상인 사람"인 경우, 전체 인원 중에서 30살 이상인 사람의 비율이 낮을 수 있기 때문에 선택도가 낮을 것입니다. 반면에 "성별이 남성인 사람"과 같이 선택 조건이 더 일반적이고 많은 튜플을 검색할 수 있는 경우, 선택도가 높을 것입니다.

(2) 프로젝트(Project, pi π) = "열의 집합"

  • 릴레이션 R(X)에서 Y⊆X(x의 부분집합 x : 학년, 학과, 이름) - 즉, y는x의 포함관계에 있을 시 이고 Y={B1,B2, … ,Bm} 인 전제 조건이 존재한다.
  • πSno, Dept(Student) (파이 속성들(테이블))
  • 프로젝트의 연산 결과는 릴레이션의 수직적 부분집합이다.
  • 결과에 튜플이 중복되는 경우는 제거 된다. - 튜플의 유일성 만족 !!
  • 결과도 튜플의 집합(릴레이션)-폐쇄성

(3) 조인(Join, ⋈) -동일 조인(조인 애트리뷰트 2)과 자연 조인(조인 애트리뷰트 1)

  • 관계데이타베이스 모델의 핵심이다.
  • R(X), S(Y), A∈X, B∈Y 에 대하여 A, B은 조인 애트리뷰트라고 한다.
  • STUDENTSno=Sno ENROL
  • 조인을 쓰는 이유는 두 릴레이션을 FK를 사용해서 연관 있는 것들끼리 조인을 하면 같이 연산할 수 있음.
  • 결과 릴레이션의 애트리뷰트는 원 소속 릴레이션 이름을 애트리뷰트 앞에 한정어로 붙여 일관성 유지함.
  • -> 학생학번=학번 등록 -> 이 연산의 결과 릴레이션이 갖는 애트리뷰트는 학생.학번, 학생.이름 , 학생. 학년, 학생. 학과, / 등록. 과목번호, 등록.성적, 등록.중간성적, 등록.기말성적, 등록.학번으로 표현
  • 그러나 상이한 애트리뷰트는 보통 그 이름만 사용
  • 카티션은 두 릴레이션을 무조건 다 연결시킨 것이고 조인은 조건에 맞는 것만 연결 -> 카티션보다 투플의 수 적음
  • 결과 차수 = R의 차수 + S의 차수 -> 결과 차수는 카티션과 동일!
  • (theta join)세타조인(R▷◁(r 조건 s)S):
  • -조인에 참여하는 두 릴레이션의 속성 값을 비교하여 조건을 만족하는 투플만 반환한다.
  • 세타조인의 조건은{=,≠,≥,≤,>,<} 중 하나가 된다.
  • 동일 조인 : 세타 조인이 '='인 경우
  • (EX) STUDENT⋈Sno=Sno ENROL

 

  • 자연 조인 : 동일 조인에서 중복된 애트리뷰트를 삭제한다. 일반적으로 조인이라 하면 자연 조인을 의미
  • 자연 조인은 일반 집합 연산자로 표현 가능 !
  • 동등조인에서 조인에 참여한 속성이 두 번 나오지 않도록 중복된 속성(두 번째 속성)을 제거한 결과를 반환
  • 중복되는 속성을 하나만 남기고 모두 제거 ! 모두 제거 (x)
  • (EX) 조인 애트리뷰트 하나로 줄임 !! STUDENTN ENROL

1. 카티션프로덕트로 모든 결과물 -> 2. 조인 애트리뷰트 기준으로 동일 조인하기 -> 3. 프로젝트 연산으로 중복되는 애트리뷰트 제거(자연 조인)

(4) 계명연산(RENAME: ρ: rho)

  • 중간 처리 결과 릴레이션에 이름을 지정하거나 애트리뷰트의 이름을 변경할 때 사용
  •  ρS(E) : 관계 대수식 E의 결과 릴레이션의 이름을 S로 지정
  • E가 "학생"이라는 릴레이션을 참조하는 관계 대수식이라면, "ρS(E)"는 결과 릴레이션의 이름을 "S"로 변경
  • ρS(B1,B2, … ,Bm )(E) : 관계 대수식 E의 결과 릴레이션의 이름을 S로 지정하고 애트리뷰트 이름은 각각 B1,B2, … ,Bm 으로 지정
  • E가 "학생"이라는 릴레이션을 참조하고 있고, B1, B2, ..., Bm이 각각 "이름", "나이", ..., "성별" 등의 애트리뷰트 이름이라면, "ρS(B1, B2, ..., Bm)(E)"는 결과 릴레이션의 이름을 "S"로 변경하고, 애트리뷰트 이름을 각각 B1, B2, ..., Bm으로 변경합니다.
  • ρ(B1,B2, … ,Bm )(R) : 릴레이션 R의 애트리뷰트 이름을 각각 B1,B2, … ,Bm 으로 변경
  • R이 "학생"이라는 릴레이션이고, B1, B2, ..., Bm이 각각 "이름", "나이", ..., "성별" 등의 애트리뷰트 이름이라면, "ρ(B1, B2, ..., Bm)(R)"은 릴레이션 R의 애트리뷰트 이름을 각각 B1, B2, ..., Bm으로 변경합니다.
  • ρ(old_name, new_name) ->  ρ(학생, 학생정보)

 

기본 연산과 복합 연산

  • 기본 연산: 다른 연산으로 대체할 수 없는 하나의 논리적 기능을 수행하는 연산, 합집합, 차집합, 카티션 프로덕트, 셀렉트, 프로젝트 <- 기본연산자 집합은 5가지 !!!!!!
  • 복합 연산: 몇 개의 기본 연산(5가지)으로 대체할 수 있는 연산, 교집합, 조인, 디비전
  • 기본연산(합집합, 차집합, 카티션 프로덕트, 프로젝트, 셀렉트) : 다른 연산으로 대체할 수 없다.
  • 복합 연산(교집합, 조인, 자연주인, 디비전-%) : 몇 개의 기본 연산으로 대체 가능하다

 

관계 대수의 확장: 세미조인, 외부조인, 외부합집합, 집계연산

  • 자연조인의 변형으로 세미 조인과 외부 조인이 있다.

1. 세미 조인: 조인했을 때 결과를 한쪽 릴레이션만 보여주는 것임

 

2. 외부 조인

  • 내부 조인을 확장한 개념, 실제 참여하지 않은 투플들도(null로) 포함하여 흔적을 남김.
  • 한 릴레이션에 있는 투플이 조인할 상대 릴레이션에 대응되는 투플이 없을 경우, 상대를 NULL 투플로 만들어 결과 릴레이션에 포함.
  • 누락 정보 처리하기 위한 조인의 확장
  • 두 조인 릴레이션의 투플들이 전부 결과 릴레이션에 포함

-> 누락된 정보를 처리하기 위해 조인을 확장함. 두 조인 릴레이션의 투플들이 전부 결과 릴레이션에 포함됨 

3. 외부 합집합 

  • 합병 가능하지 않은 두 릴레이션의 모든 애트리뷰트를 포함하는 확장된 릴레이션

       -> 대응 가능한 투플들을 연결시키고 불가능한 것들은 null로 둠

  • 원래 합집합은 같은 도메인 타입, 애트리뷰트 수를 가져야만(차수 동일) 합병 ㄱㄴ BUT 이런 조건 무시하고 그냥 합쳐라

4. 집계 연산

  • AVG성적(등록) : 등록 R의 성적의 모든 값들에 대해 평균값 계산 => 테이블이 아닌 하나의 Value
  • GROUP학년(학생) : 1학년, 2학년 등 학생 릴레이션의 투플들을 학년 값에 따라 그룹을 나눔
  • GROUP과목번호AVG성적(등록) : 등록 릴레이션에서 과목별 그룹에 대한 평균 성적
  •   -> 실행 순서는 그룹 -> 평균 순서임
  • 일반 형식 : GAFB(E) ->
  • E : 관계 대수식, F : 집계 함수 ( SUM, AVG, MAX, MIN, COUNT)
  •  B : 집계 함수의 적용 대상 애트리뷰트 , G : 그룹 함수 GROUP,
  • A : 그룹 함수가 적용할 애트리뷰트

관계 대수의 질의문 표현

  • 사용자가 질의문을 관계 대수로 표현
  • 두 테이블 조인할 때는 무조건 기본키, 외래키 조합으로 이루어져 있어야 된다. 한 릴레이션이 다른 릴레이션 참조하는 형태여야지만 조인 가능하다 !!!! 조인 애트리뷰트가 있어야 한다.