관계형 데이터베이스 이론의 3단계
- 관계형 데이터 모델(relational data model)
- 릴레이션 개념
- 테이블, 집합, 릴레이션 스키마, 릴레이션 인스탄스, 도메인, 애트리뷰트, 투플 등
- 키: 기본키, 외래키, 후보키 등
- 기본키와 외래키를 통한 개체 간의 연결
- 데이터가 어떻게 모델링되고 구조화되어 있는지
- 관계 대수(relational algebra)
- 릴레이션으로 표현된 데이터에 대한 대수적인 연산 체계
- 릴레이션에 대한 연산자들로 정의됨
- 데이터를 어떻게 조작할 수 있는 있는지
- 데이터 언어(Data Language)
- 사용자가 데이터베이스에 접근하여 실제로 데이터베이스 작업을 할 수 있는 질의언어(Query Language)
- DDL, DML, DCL 로 구성
- 스키마정의/검색,삽입,삭제,갱신/백업,복원,접근권한제어등
- 표준화된 언어: SQL
관계 대수(Relational Algebra)
- 릴레이션 단위로 데이터를 처리, 조작하는 연산의 집합
- 릴레이션 : 테이블이면서, 투플의 집합
- 집합연산자
- 합집합(UNION, ∪)
- 교집합(INTERSECT, ∩)
- 차집합(DIFFERENCE, -)
- 카티션 프로덕트(CARTESIAN PRODUCT, ×)
- 순수 관계 연산자
- 실렉트(SELECT, σ)
- 프로젝트(PROJECT, ∏)
- 조인(JOIN, ⋈)
- 디비전(DIVISION, ÷)
- 폐쇄 성질 (closure property)
- 피연산자와 연산 결과가 모두 릴레이션
- 중첩(nested)된 수식의 표현이 가능
집합 연산자
- 합집합 (union,∪)
R∪S = { t | t∈R V t∈S }
|R∪S| ≤ |R| + |S|
- 교집합 (intersect,∩) R∩S = { t | t∈R ∧ t∈S } |R∩S| ≤ min{ |R|, |S| }
- 차집합 (difference,-) R-S = { t | t∈R ∧ t ∉ S }
|R-S| ≤ |R|
- 카티션 프로덕트 (Cartesian product,×) R×S = { r·s | r∈R ∧ s∈S }
- : 투플의 접합(concatenation)
|R×S| = |R|×|S|
차수(degree) = R의 차수 + S의 차수
- 합병가능(union-compatible)한 릴레이션
- 합집합(∪), 교집합(∩), 차집합(-)의 피연산자들은
- 차수가 같아야 함
- 대응 애트리뷰트 쌍 별로 도메인이 같아야 함
- ∪, ∩, × 연산은 결합적(associative)임
- R∪S∪T = (R∪S)∪T = R∪(S∪T)
- R∩S∩T = (R∩S)∩T = R∩(S∩T)
- R×S×T = (R×S)×T = R×(S×T)
- ∪, ∩, × 연산은 교환적(commutative)임
- R∪S = S∪R
- R∩S = S∩R
- R×S = S×R
순수 관계 연산자
- 릴레이션 (스키마) : R(X) = R(A1, ... , An)
- 투플 r:<a1,...,an> 릴레이션 R={r | r = <a1, ... , an> }
- ai : 투플 r에 대한 애트리뷰트 Ai의 값
- ai = r.Ai = r[Ai]
- 투플은 다음과 같이 다양한 방식으로 표현 가능 <a1, ... , an> = <r.A1 , r.A2 ,..., r.An > = < r[A1], r[A2], ..., r[An] > = r[A1, A2, ... An] = r[X]
실렉트 (SELECT: σ)
- Select 연산은 unary operator
- 연산 결과는 릴레이션의 수평적 부분집합 (horizontal subset)
- 결과: 조건을 만족하는 투플들 만으로 구성된 릴레이션
Example
프로젝트 (PROJECT: ∏)
- 프로젝트 연산자: unary operator
- example
- 학생(학번,이름,학년,학과)에서 ∏이름,학과(학생)
- 릴레이션의 수직적 부분집합(vertical subset)
- 결과에 투플이 중복되는 경우에는 제거
- 결과도 투플의 집합(릴레이션) - 폐쇄성
- ∏Y(∏X(R)) = ∏Y(R)
Example
세타조인 (JOIN: ⋈)
- R(X),S(Y),A∈X,B∈Y에대하여
- R⋈AθB S={r·s|r∈R∧s∈S∧(r.Aθs.B)}
- A, B : 조인 애트리뷰트(join attribute)
- θ: 비교연산자
- 결과차수=R의차수+S의차수
- 조인: binary operator
- 세타조인의 의미적 해석
- 두 릴레이션 R과 S의 곱집합에서 θ 조건을 만족하는 투플만 모은 수평적 부분집합.
Example
동일 조인 (equijoin)
- 세타조인에서 θ가 "="인 경우
R ⋈ A=BS = { r·s | r∈R ∧ s∈S ∧ ( r.A=s.B ) }
자연조인(natural join: ⋈N)
R(X), S(Y)의 조인 애트리뷰트를 Z(=X∩Y)라 하면
R ⋈ NS
= {<r · s>[X∪Y] | r∈R ∧ s∈S ∧ r[Z]=s[Z] }
= ∏ X∪Y(σ Z=Z(R×S))
= ∏ X∪Y(R⋈ Z=ZS)
- 즉, 동일 조인의 결과에서 중복되는 애트리뷰트를 제거
- 자연조인의 조인 애트리뷰트 Z는 일반적으로 R의 기본키(즉, S의 외래키) 로 구성됨
- 두 테이블의 투플 들 간의 “관계”는 기본키와 외래키로 표현되며, 조인 연산을 통해서 해당 투플들을 연결하는 연산을 하게 됨.
- 연결된 데이터를 두 테이블로 분리하여 데이터의 중복성을 피하고, 필요할 때에만 연결하는 원리
릴레이션 학생과 등록의 자연 조인 예
디비전(DIVISON: ÷)
R÷S=
{ t | t∈ ∏D(R) ∧ t·s ∈ R for all s∈S }
즉, {t[a1,...,an]|t ∈ ∏D(R) ∧ ∀s∈S (t[a1,...,an] ∪ s) ∈ R) }
- S에 속하는 모든 투플 s에 대해서 쌍을 이루는 값(t·s)들이 R에 존재할 때의 t 투플의 집합
- 디비전의 의미적 해석: 디비전은 “S에 있는 모든 투플과 쌍을 이루는 R의 투플을 구하라”의 의미
기본 연산과 복합 연산
- 기본 연산 (primitive operations)
- 다른 연산으로 대체할 수 없는 하나의 논리적 기능을 수행하는 연산
- 합집합(∪) , 차집합(-) , 곱집합(×), 프로젝트(∏), 실렉트(σ)
- 복합 연산 (composite operations)
- 기본 연산의 조합으로 대체할 수 있는 연산
- 교집합(∩), 조인(⋈), 디비전(÷)
세미조인(semijoin: ⋉)
- R(X), S(Y)의 조인 애트리뷰트를 Z(=X∩Y)라 하면
- R⋉S: S와 자연 조인이 가능한 R의 투플의 집합
- R⋉S = {r | r∈R ∧ s∈S ∧ r[Z]=s[Z] }
외부 조인 (outerjoin, ⋈+)
- 한 릴레이션에 있는 투플이 조인할 상대 릴레이션에 대응되는 투플이 없을 경우, 상대를 널(null) 투플로 만들어 결과 릴레이션에 포함
- 누락 정보를 처리하기 위한 조인의 확장
- 두 조인 릴레이션의 투플들이 전부 결과 릴레이션에 포함됨
- 왼쪽 외부조인(left outer join): 왼쪽의 릴레이션의 투플들만 추가
- 오른쪽 외부조인(right outer join): 오른쪽의 릴레이션의 투플들만 추가
외부 합집합 (outer-union, ∪+)
- 합병 가능하지 않은(not union-compatible) 릴레이션간의 합집합
- 애트리뷰트 수가 다르거나, 대응하는 애트리뷰트의 도메인이 다른 두 릴레이션
- 두 릴레이션의 모든 애트리뷰트를 포함하는 확장된 릴레이션으로 만듦
- 확장된 릴레이션에 해당하는 애트리뷰트 값이 없을 때는 널(Null) 값으로 채움
집계 (aggregation) 연산
- 집계연산: 릴레이션의 특정 애트리뷰트의 집계 값을 계산
- 그룹연산: 릴레이션의 특정 애트리뷰트로 투플들을 그룹화
- 집계연산만 적용할 수도 있고, 그룹연산 이후 집계연산을 동시에 적용할 수 있음
- AVG성적(등록)
- 등록 릴레이션의 성적 애트리뷰트 값들에 대해 평균값 계산
- GROUP학년(학생)
- 학생 릴레이션의 투플들을 학년 값에 따라 그룹을 만듦
- GROUP과목번호AVG성적(등록)
- 등록 릴레이션에서 과목별 그룹에 대한 평균성적
- 실행 순서는 GROUP, AVG 순서임
- 일반 형식 : GROUPA FUNCTIONB (E)
- E:릴레이션혹은관계대수식
- FUNCTION : 집계 함수 ( SUM, AVG, MAX, MIN, COUNT)
- B:집계함수의적용대상애트리뷰트
- GROUP : 그룹 함수
- A:그룹함수가적용할애트리뷰트