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}$