Relational Database & Algebra

Relational Database

Relational Database관계형 데이터베이스를 뜻한다. 관계형 데이터베이스는 행(튜플)과 열(속성)로 이루어지는 테이블 형태로 표현할 수 있다. 

상품 번호 상품명 보관 창고
D12 키보드 EF4D
B53 생수 AD1F

위와 같이 여러 데이터들이 서로 어떠한 관계를 가지고 있는지 파악할 수 있다는 장점이 있다. 여기서 [상품 번호, 상품명, 보관 창고]는 데이터의 속성이며, (D12, 키보드, EF4D)와 같은 데이터 열을 튜플이라고 한다. 


Key

관계형 데이터는 {key : value}의 관계로 볼 수 있다. 

Super_key ⊃ Candidate_key ⊃ Primary_key

  • Super key: (슈퍼 키) 데이터 열을 유일하게 구분할 수 있는 속성의 집합
  • Candidate key: (후보 키) 데이터 열을 유일하게 구분할 수 있는 속성의 최소 집합
  • Primary key: (주요 키) 데이터 열을 유일하게 구분할 수 있는 하나의 속성
ID 상품명 제조사
DF03407 적축 키보드 E01 A
AE00015 적축 키보드 E01 B
ZT33002 청축 키보드 B03 B
...

쇼핑몰에서 원하는 상품을 검색한다고 하자. {ID, 상품명, 제조사}{ID, 상품명} 등 방법으로 찾는 것은 Super key를 활용한 것이다. 상품명이나 제조사 하나만으로는 중복된 제품이 나올 수 있기 때문에 {상품명, 제조사}를 모두 입력해 제품을 찾는다면 Candidate key를 사용한 것이다. 상품명과 제조사 중 하나라도 입력하지 않으면 식별하지 못하는 값들이 있으므로 이는 최소 집합이라고 할 수 있다. 가장 쉬운 방법으로는 ID로 검색하는 것이다. ID는 상품의 고유 번호이기 때문에 ID 하나만으로 특정 제품을 찾을 수 있다. 이 경우는 Primary key를 사용한 것이다. 

PK & FK

  • PK: Primary Key. 중복되지 않고, NULL 값을 가지지 않는 완전한 키
  • FK: Foreign Key. 다른 테이블에서 참고한 PK

PK는 위에서 설명한 Primary key이다. Primary key는 원하는 데이터를 확실하게 식별할 수 있는 키로, 중복되어서도 안 되고 null 값을 가져서도 안 된다. 

FK다른 테이블의 PK를 참조한 값이다. 학생의 동아리를 표현하기 위해 동아리 정보에서 동아리명을 가져오는 식이다. FK는 null 값을 포함할 수도 있다. 


Operation

관계형 데이터베이스에서 수행 가능한 연산의 종류는 아래와 같이 정의할 수 있다. 

  • SELECT
  • PROJECT
  • UNION
  • DIFFERENCE
  • INTERSECTION
  • CARTESIN PRODUCT
  • JOIN
  • DIVISION

 

SELECT & PROJECT

Select(σ)는 행(튜플), Project(π)는 열(속성)을 추출할 때 사용한다. 대신 Project는 중복된 튜플을 제거한다. 

$\sigma_{A=3}(Table)\to \begin{bmatrix}
3 & 1 & 3 \\
3 & 2 & 2 \\
\end{bmatrix}$

$\pi_{B,C}(Table)\to \begin{bmatrix}
1 & 3 \\
2 & 2 \\
\end{bmatrix}$

 

UNION & DIFFERENCE & INTERSECTION

Union(∪)합집합, Difference(-)차집합, Intersection(∩)교집합을 뜻한다. 

$T1\cup T2\to \begin{bmatrix}3 & 2 \\0 & 7 \\ 2 & 1 \\ \end{bmatrix}$

$T1-T2\to \begin{bmatrix}2 & 1 \\ \end{bmatrix}$

$T1\cap T2\to \begin{bmatrix}3 & 2 \\0 & 7 \\\end{bmatrix}$

 

OUTER UNION

Outer Union은 합집합과 달리 중복되는 데이터는 하나로 합친다. 그 외 데이터는 null 값으로 채운다. 아래에 나오는 Full Outer Join과 매우 유사하다.

$T1\cup T2\to \begin{bmatrix}
a & 4 & 5 \\
b & 8 & \\
c & 0 & 1 \\
d & 5 & \\
e & & 0 \\
\end{bmatrix}$

 

CARTESIN PRODUCT

Cartesin Product(×)은 두 테이블의 모든 행을 조합한 결과를 보여준다. 

$T1\times T2\to \begin{bmatrix}
a1 & b1 & c1 & d1 \\
a1 & b1 & c2 & d2 \\
a1 & b1 & c3 & d3 \\
a2 & b2 & c1 & d1 \\
a2 & b2 & c2 & d2 \\
a2 & b2 & c3 & d3 \\
\end{bmatrix}$

 

JOIN

INNER JOIN

Inner join(⋈)은 특정 조건(=, <, ≤ 등)을 만족하는 데이터를 연결한다. 

$T1\bowtie_{B<C} T2 \to \begin{bmatrix}
9 & 7 & 9 & 8 \\
3 & 3 & 7 & 1 \\
3 & 3 & 9 & 8 \\
\end{bmatrix}$

 

NATURAL JOIN

Natural join(*)은 두 데이터가 공통으로 가진 항목을 하나로 합친다. $JOIN_{A=A'}$일 경우, A와 A' 중 일치하는 부분은 합치고 나머지는 삭제되는 식이다.

$T1*_{A=A}T2\to \begin{bmatrix}
a & 4 & 5 \\
c & 0 & 1 \\
\end{bmatrix}$

 

OUTER JOIN

  • Left Outer Join(⟕)
  • Right Outer Join(⟖)
  • Full Outer Join(⟗)

Outer Join은 특정 테이블을 기준으로 Join을 수행한다.

예를 들어 $A\ Left-join_{AID=BID}\ B$라면, AID를 유지하고, AID와 일치하는 BID만을 가져와 합친다. 

Full Outer Join은 양쪽 데이터를 모두 유지한 채로 합친다. 

$T1\bowtie_{A=A}T2\to \begin{bmatrix}
a & 4 & 5 \\
b & 8 & \\
c & 0 & 1 \\
d & 5 & \\
e & & 0 \\
\end{bmatrix}$

 

DIVISION

Division(÷)은 A ÷ B에서 B 데이터를 모두 포함하는 A의 행을 찾는다. 

$T1\div T2\to \begin{bmatrix}
a1 \\
a3 \\
\end{bmatrix}$