DBMS - 관계대수
안녕하세요, 미래의 데이터베이스 마법사 여러분! 관계대수의 마법적인 세계를 탐험하는 흥미로운 여정에 여러분을 안내하게 되어 기쁩니다. (floppy disk가 실제로 유연했던 시절을 기억하는 만큼 많은 해 동안 컴퓨터 과학을 가르쳐온 사람으로서) 이 주제를 마스터하면 데이터베이스의 세계에서 슈퍼파워를 얻는 것과 같을 것입니다. 그麼, 시작해 보겠습니다!
관계대수
초인 액션 피규어 컬렉션을 정리하고 있는 상상해 보세요. 관계대수는 초인의 특별한 능력처럼 컬렉션을 매우 유용한 방법으로 조작하고 질문할 수 있게 해줍니다. 이것은 우리가 관계 데이터베이스와 상호작용하는 방법의 기초가 되며, 관계(테이블)에 대한 연산을 제공하는 이론적 틀입니다.
기본 개념
화려한 기호를 다루기 전에 몇 가지 기본 규칙을 설정해 보겠습니다:
- 관계는 튜플(행)의 집합입니다.
- 속성은 열 머리입니다.
- 연산은 새로운 관계를 결과로 생성합니다.
이제 우리가 사용할 수 있는 초능력(연산)을 보겠습니다:
연산 | 기호 | 설명 |
---|---|---|
선택 | σ | 조건에 따라 행을 필터링합니다 |
투영 | ∏ | 특정 열을 선택합니다 |
합집합 | ∪ | 두 호환 가능한 관계를 결합합니다 |
집합 차이 | − | 하나의 관계에서 다른 관계에 나타나는 튜플을 제거합니다 |
笛卡尔積 | Χ | 하나의 관계의 모든 행을 다른 관계의 모든 행과 결합합니다 |
이름 바꾸기 | ρ | 속성이나 관계의 이름을 변경합니다 |
선택 연산 (σ)
선택 연산은 데이터베이스에 대한 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 |
Heroes
와 Sidekicks
를 결합합니다:
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 |
관계 계산
이제 마지막으로, 관계 계산에 대해 간단히 설명해 보겠습니다. 관계 대수는 데이터를 얻는 방법에 대해 설명하는 반면, 관계 계산은 얻고자 하는 데이터에 대해 설명하는 선언적 방법입니다.
두 종류가 있습니다:
- 튜플 관계 계산 (TRC)
- 도메인 관계 계산 (DRC)
예를 들어, TRC에서 "Flight" 능력을 가진 모든 영웅을 찾는다면:
{H | H ∈ Heroes ∧ H.Power = "Flight"}
이는 "H의 Power가 Flight인 Heroes의 모든 튜플 H를 주세요"라는 의미입니다.
그리고 여러분! 데이터베이스 기술이 레벨업 했습니다. 강력한 능력을 가지면 큰 책임이 따릅니다 - 이 관계 대수 연산을 지혜롭게 사용하면 데이터베이스를 프로처럼 질문할 수 있을 것입니다. 이제 진정한 슈퍼 헴러로서 데이터를 정리하는 정확성을 가지고 가세요!
Credits: Image by storyset