DBMS - 관계대수

안녕하세요, 미래의 데이터베이스 마법사 여러분! 관계대수의 마법적인 세계를 탐험하는 흥미로운 여정에 여러분을 안내하게 되어 기쁩니다. (floppy disk가 실제로 유연했던 시절을 기억하는 만큼 많은 해 동안 컴퓨터 과학을 가르쳐온 사람으로서) 이 주제를 마스터하면 데이터베이스의 세계에서 슈퍼파워를 얻는 것과 같을 것입니다. 그麼, 시작해 보겠습니다!

DBMS - Relational Algebra

관계대수

초인 액션 피규어 컬렉션을 정리하고 있는 상상해 보세요. 관계대수는 초인의 특별한 능력처럼 컬렉션을 매우 유용한 방법으로 조작하고 질문할 수 있게 해줍니다. 이것은 우리가 관계 데이터베이스와 상호작용하는 방법의 기초가 되며, 관계(테이블)에 대한 연산을 제공하는 이론적 틀입니다.

기본 개념

화려한 기호를 다루기 전에 몇 가지 기본 규칙을 설정해 보겠습니다:

  1. 관계는 튜플(행)의 집합입니다.
  2. 속성은 열 머리입니다.
  3. 연산은 새로운 관계를 결과로 생성합니다.

이제 우리가 사용할 수 있는 초능력(연산)을 보겠습니다:

연산 기호 설명
선택 σ 조건에 따라 행을 필터링합니다
투영 특정 열을 선택합니다
합집합 두 호환 가능한 관계를 결합합니다
집합 차이 하나의 관계에서 다른 관계에 나타나는 튜플을 제거합니다
笛卡尔積 Χ 하나의 관계의 모든 행을 다른 관계의 모든 행과 결합합니다
이름 바꾸기 ρ 속성이나 관계의 이름을 변경합니다

선택 연산 (σ)

선택 연산은 데이터베이스에 대한 X-ray vision과 같습니다. 특정 조건에 따라 행을 필터링할 수 있습니다.

문법: σ<조건>(관계)

예를 들어, Heroes 테이블이 있습니다:

| Name   | Power        | Age |
|--------|--------------|-----|
| Bruce  | Intelligence | 35  |
| Clark  | Flight       | 30  |
| Diana  | Strength     | 5000|
| Barry  | Speed        | 28  |

100세 미만의 영웅을 찾고 싶다면:

σ Age < 100 (Heroes)

이렇게 하면 다음과 같습니다:

| Name   | Power        | Age |
|--------|--------------|-----|
| Bruce  | Intelligence | 35  |
| Clark  | Flight       | 30  |
| Barry  | Speed        | 28  |

보세요! 디아나, 우리의 영원한 여왕을 필터링했습니다!

투영 연산 (∏)

투영 연산은 축소 레이저와 같습니다. 특정 열을 선택하여 관계의 너비를 줄입니다.

문법: ∏<속성 목록>(관계)

우리의 Heroes 테이블을 사용하여 이름과 능력만 원하는 경우:

∏ Name, Power (Heroes)

결과:

| Name   | Power        |
|--------|--------------|
| Bruce  | Intelligence |
| Clark  | Flight       |
| Diana  | Strength     |
| Barry  | Speed        |

우리는 테이블을 줄이고 필요한 것에만 집중했습니다!

합집합 연산 (∪)

합집합 연산은 드래곤볼 Z의 합체와 같습니다. 두 호환 가능한 관계를 결합합니다.

문법: 관계1 ∪ 관계2

예를 들어, 다른 테이블 Sidekicks가 있습니다:

| Name   | Power   | Age |
|--------|---------|-----|
| Robin  | Acrobat | 22  |
| Jimmy  | None    | 25  |

HeroesSidekicks를 결합합니다:

Heroes ∪ Sidekicks

결과:

| Name   | Power        | Age |
|--------|--------------|-----|
| Bruce  | Intelligence | 35  |
| Clark  | Flight       | 30  |
| Diana  | Strength     | 5000|
| Barry  | Speed        | 28  |
| Robin  | Acrobat      | 22  |
| Jimmy  | None         | 25  |

이제 우리는 슈퍼 팀을 가지고 있습니다!

집합 차이 연산 (−)

집합 차이는 해체 레이저와 같습니다. 하나의 관계에서 다른 관계에 나타나는 튜플을 제거합니다.

문법: 관계1 − 관계2

영웅이 아닌 측근을 찾고 싶다면:

Heroes − Sidekicks

이렇게 하면 원래의 Heroes 테이블이 나타납니다. Sidekicks 테이블에 아무도 없기 때문입니다.

笛卡尔積 연산 (Χ)

笛卡尔積은 초인이 모든 측근과 만나는 대체 우주를 만드는 것과 같습니다.

문법: 관계1 Χ 관계2

Heroes Χ Sidekicks

이렇게 하면 모든 가능한 초인과 측근의 조합이 나타납니다. 테이블이 매우 커서 전체를 보여드리지 않겠습니다. 여기서 일부를 보여드리겠습니다:

| HName  | HPower       | HAge | SName | SPower  | SAge |
|--------|--------------|------|-------|---------|------|
| Bruce  | Intelligence | 35   | Robin | Acrobat | 22   |
| Bruce  | Intelligence | 35   | Jimmy | None    | 25   |
| Clark  | Flight       | 30   | Robin | Acrobat | 22   |
| Clark  | Flight       | 30   | Jimmy | None    | 25   |
...

이름 바꾸기 연산 (ρ)

이름 바꾸기는 현실을 변화시키는 능력과 같습니다. 속성이나 관계의 이름을 변경할 수 있습니다.

문법: ρ new_name (old_name)

Power 속성을 Superpower로 변경하고 싶다면:

ρ Superpower←Power (Heroes)

결과:

| Name   | Superpower   | Age |
|--------|--------------|-----|
| Bruce  | Intelligence | 35  |
| Clark  | Flight       | 30  |
| Diana  | Strength     | 5000|
| Barry  | Speed        | 28  |

관계 계산

이제 마지막으로, 관계 계산에 대해 간단히 설명해 보겠습니다. 관계 대수는 데이터를 얻는 방법에 대해 설명하는 반면, 관계 계산은 얻고자 하는 데이터에 대해 설명하는 선언적 방법입니다.

두 종류가 있습니다:

  1. 튜플 관계 계산 (TRC)
  2. 도메인 관계 계산 (DRC)

예를 들어, TRC에서 "Flight" 능력을 가진 모든 영웅을 찾는다면:

{H | H ∈ Heroes ∧ H.Power = "Flight"}

이는 "H의 Power가 Flight인 Heroes의 모든 튜플 H를 주세요"라는 의미입니다.

그리고 여러분! 데이터베이스 기술이 레벨업 했습니다. 강력한 능력을 가지면 큰 책임이 따릅니다 - 이 관계 대수 연산을 지혜롭게 사용하면 데이터베이스를 프로처럼 질문할 수 있을 것입니다. 이제 진정한 슈퍼 헴러로서 데이터를 정리하는 정확성을 가지고 가세요!

Credits: Image by storyset