관계 대수: 두 판 사이의 차이

IT위키
(관계대수 문서로 넘겨주기)
 
편집 요약 없음
 
(같은 사용자의 중간 판 4개는 보이지 않습니다)
1번째 줄: 1번째 줄:
#넘겨주기 [[관계대수]]
[[분류:데이터베이스]][[분류:정보처리기사]]
'''Relational Algebra'''
 
관계 대수는 관계형 데이터베이스에서 데이터를 조회하고 조작하기 위한 수학적 언어를 말한다. 관계 대수는 테이블(관계)에 대한 여러 가지 연산을 정의하며, 이러한 연산을 통해 데이터를 필터링하고 조합할 수 있다.
 
== 개요 ==
* 릴레이션 조작을 위한 연산의 집합으로 피연산자와 결과가 모두 릴레이션이다.
* 일반 집합 연산과 순수 관계 연산으로 구분된다.
* 질의에 대한 해를 구하기 위해 수행해야 할 연산의 순서를 명시한다.
* 원하는 정보와 그 정보를 어떻게 유도하는가를 기술하는 절차적 특징을 가지고 있다.
* 기본적으로 관계해석과 관계대수는 관계 데이터베이스를 처리하는 기능과 능력 면에서 동일하다.
 
== 요약 ==
 
=== 순수 관계 연산자 ===
{| class="wikitable"
! 연산자
! 기호
! 표기법
! 설명
! 예시
|-
| SELECT
| δ(시그마)
| δ<sub><조건></sub>(R)
| 선택 조건, 열 조회
| δ<sub>DNO=4</sub>(EMP)
|-
| PROJECT
| π(파이)
| π<sub><리스트></sub>(R)
| 속성 선택, 행 조회
| π<sub>DNO,NAME</sub>(EMP)
|-
| JOIN
| ⋈(보타이)
| R⋈<sub><조건></sub>S
| 두 릴레이션 결합
| DEPT⋈<sub>dssn=essn</sub> EMP
|-
| DIVISION
| ÷(나누기)
| R÷S
| R 중 S 기준 교집합
| EMP÷DEPT
|}
 
=== 일반 집합 연산자 ===
{| class="wikitable"
! 연산자
! 표기법
! 집합 표현
! 카디널리티
|-
| 합집합
| ∪
| <nowiki>R∪S = {t|t∈R∨t∈S}</nowiki>
| <nowiki>|R∪S|≤|R|+|S|</nowiki>
|-
| 교집합
| ∩
| <nowiki>R∩S = {t|t∈R∧t∈S}</nowiki>
| <nowiki>|R∩S|≤MIN(|R|,|S|)</nowiki>
|-
| 차집합
| -
| <nowiki>R-S = {t|t∈R∧t∉S}</nowiki>
| <nowiki>|R-S|≤|R|</nowiki>
|-
| 교차곱(=카티션 프로덕트, 크로스 조인)
| ×
| <nowiki>R×S = {rs|r∈R∧s∈S}</nowiki>
| <nowiki>|R×S|=|R|×|S|</nowiki>
|}
 
== 설명 ==
 
=== DIVISION ===
DIVISION, 즉 DIVIDE 연산은 관계 대수(Relational Algebra)에서 특정 조건을 만족하는 '''모든''' 값을 가지는 튜플을 찾는 데 사용되는 연산이다. 특히, 이 연산은 "A가 B의 모든 조건을 만족하는가?"와 같은 상황을 처리하는 데 유용하다. 예를 들어, '''모든 과목을 들은 학생'''이나 '''모든 상품을 구매한 고객'''을 찾는 문제에서 사용할 수 있다.
 
'''Divide 연산의 기본 개념'''
 
* '''R ÷ S'''는 R의 속성 중 S의 속성들과 일치하는 속성들을 기준으로 나눈다는 의미이다.
* '''R'''은 피제수(dividend)라고 하며, 이 관계는 전체 데이터가 포함되어 있다.
* '''S'''는 제수(divisor)라고 하며, 이 관계는 조건을 나타낸다.
* <code>R ÷ S</code>의 결과는 '''S에 있는 모든 값과 일치하는 R의 튜플'''들을 반환한다.
 
'''예시'''
 
* '''R(학생 이름, 과목)''': 학생이 수강한 과목 정보 릴레이션
* '''S(과목)''': 특정 과목들의 릴레이션 (예: {과목: 수학, 과학})
* 우리는 '''S에 있는 모든 과목을 들은 학생들'''을 찾고자 한다.
 
{| class="wikitable"
!R
!DIVIDED-BY
!S
!R÷S
|-
|
{| class="wikitable"
!학생 이름
!과목
|-
|Alice
|수학
|-
|Alice
|영어
|-
|Bob
|수학
|-
|Bob
|과학
|-
|Charlie
|수학
|-
|Charlie
|영어
|-
|Charlie
|과학
|}
|
{| class="wikitable"
!과목
|-
|수학
|-
|영어
|}
|
{| class="wikitable"
!학생 이름
|-
|Alice
|-
|Charlie
|}
|}
 
=== 집계 및 그룹 함수 ===
'''Aggregate Functions and Grouping'''
 
원래 그룹핑과 집계는 관계 대수에서 지원되지 않는다. 하지만 DB에서 흔하게 사용되는 SUM, AVERAGE, MAXIMUM, MINIMUM, COUNT 등을 표현하기 위해 후대에 생겨났다. 표현법은 아래와 같다.
 
<sub><그루핑 속성></sub> ℑ <sub><집계 함수></sub> (R)
 
예를 들어 SUM과 COUNT를 표현하려면 아래와 같이 할 수 있다.<blockquote>SELECT SUM(RECORD) FROM EMP_PERFORM GROUP BY SSN -- 사람으로 묶여서 RECORD의 합을 구한다
 
<sub>SSN</sub> ℑ <sub>SUM RECORD</sub> (EMP_PERFORM)</blockquote><blockquote>SELECT COUNT(RECORD_NO) FROM EMP_PERFORM -- 특정 그룹핑 기준이 없을 경우
 
ℑ <sub>COUNT RECORD_NO</sub> (EMP_PERFORM)</blockquote>현대 SQL에서의 GROUP BY와 같이 집계 결과와, 집계 기준이 되는 속성만 SELECT를 할 수 있다. 집계된 결과들은 그 자체로 속성 명이 없기 때문에 별도로 부여할 수 있다. 새롭게 정의하는 속성명으로 구성된 집합을 만드는 것이다.<blockquote>ρ<sub>R(Dno, No_of_employees, Average_sal)</sub> (<sub>Dno</sub> ℑ <sub>COUNT Ssn, AVERAGE Salary</sub> (EMPLOYEE))</blockquote>
 
== 예시 ==
아래 두 릴레이션을 사용하여 몇 가지 관계 대수 연산의 예를 살펴본다.
 
'''1. EMPLOYEE 테이블'''
{| class="wikitable"
!Ssn
!Name
!Age
!Dept_no
|-
|123-45-6789
|Alice
|30
|1
|-
|234-56-7890
|Bob
|40
|2
|-
|345-67-8901
|Charlie
|35
|1
|-
|456-78-9012
|David
|28
|3
|-
|567-89-0123
|Eva
|50
|2
|}
'''2. DEPARTMENT 테이블'''
{| class="wikitable"
!Dept_no
!Dept_name
|-
|1
|HR
|-
|2
|IT
|-
|3
|Finance
|}
----'''예시 1: 선택 조건 (Selection)'''
 
'''조건''': 나이가 30세 이상인 직원의 정보를 선택한다.
 
'''관계 대수''':<blockquote>σ<sub>(Age ≥ 30)</sub>(EMPLOYEE)</blockquote>'''결과''':
{| class="wikitable"
!Ssn
!Name
!Age
!Dept_no
|-
|123-45-6789
|Alice
|30
|1
|-
|234-56-7890
|Bob
|40
|2
|-
|345-67-8901
|Charlie
|35
|1
|-
|567-89-0123
|Eva
|50
|2
|}
----'''예시 2: 속성 선택 (Projection)'''
 
* '''쿼리''': 직원의 이름과 나이만 선택한다.
* '''관계 대수''':<blockquote>π<sub>(Name, Age)</sub>(EMPLOYEE)</blockquote>
 
* '''결과''':
{| class="wikitable"
!Name
!Age
|-
|Alice
|30
|-
|Bob
|40
|-
|Charlie
|35
|-
|David
|28
|-
|Eva
|50
|}
----'''예시 3: 선택 조건과 선택 속성 (Selection and Projection)'''
 
* '''쿼리:''' 나이가 40세 이상인 직원의 이름만 선택한다.
** 조건을 먼저 정하고 선택된 결과 중 속성을 선택하는 것이 일반적이다.
* '''관계 대수''':<blockquote>π<sub>(Name, Age)</sub>(σ<sub>(Age ≥ 40)</sub>(EMPLOYEE))</blockquote>
 
* '''결과''':
 
{| class="wikitable"
!Name
|-
|Bob
|-
|Eva
|}
----'''예시 3: 조인 (Join)'''
 
* '''쿼리''': 각 직원의 이름과 소속 부서 이름을 함께 출력한다.
* '''관계 대수''':<blockquote>EMPLOYEE ⨝ <sub>(EMPLOYEE.Dept_no = DEPARTMENT.Dept_no)</sub> DEPARTMENT</blockquote>
 
* '''결과''':
{| class="wikitable"
!Ssn
!Name
!Age
!Dept_no
!Dept_name
|-
|123-45-6789
|Alice
|30
|1
|HR
|-
|234-56-7890
|Bob
|40
|2
|IT
|-
|345-67-8901
|Charlie
|35
|1
|HR
|-
|456-78-9012
|David
|28
|3
|Finance
|-
|567-89-0123
|Eva
|50
|2
|IT
|}
 
== 관계대수와 관계해석 비교 ==
{{틀:관계대수와 관계해석}}
 
== 같이 보기 ==
* [[관계 해석]]

2024년 10월 18일 (금) 04:59 기준 최신판

Relational Algebra

관계 대수는 관계형 데이터베이스에서 데이터를 조회하고 조작하기 위한 수학적 언어를 말한다. 관계 대수는 테이블(관계)에 대한 여러 가지 연산을 정의하며, 이러한 연산을 통해 데이터를 필터링하고 조합할 수 있다.

개요[편집 | 원본 편집]

  • 릴레이션 조작을 위한 연산의 집합으로 피연산자와 결과가 모두 릴레이션이다.
  • 일반 집합 연산과 순수 관계 연산으로 구분된다.
  • 질의에 대한 해를 구하기 위해 수행해야 할 연산의 순서를 명시한다.
  • 원하는 정보와 그 정보를 어떻게 유도하는가를 기술하는 절차적 특징을 가지고 있다.
  • 기본적으로 관계해석과 관계대수는 관계 데이터베이스를 처리하는 기능과 능력 면에서 동일하다.

요약[편집 | 원본 편집]

순수 관계 연산자[편집 | 원본 편집]

연산자 기호 표기법 설명 예시
SELECT δ(시그마) δ<조건>(R) 선택 조건, 열 조회 δDNO=4(EMP)
PROJECT π(파이) π<리스트>(R) 속성 선택, 행 조회 πDNO,NAME(EMP)
JOIN ⋈(보타이) R⋈<조건>S 두 릴레이션 결합 DEPT⋈dssn=essn EMP
DIVISION ÷(나누기) R÷S R 중 S 기준 교집합 EMP÷DEPT

일반 집합 연산자[편집 | 원본 편집]

연산자 표기법 집합 표현 카디널리티
합집합 R∪S = {t|t∈R∨t∈S} |R∪S|≤|R|+|S|
교집합 R∩S = {t|t∈R∧t∈S} |R∩S|≤MIN(|R|,|S|)
차집합 - R-S = {t|t∈R∧t∉S} |R-S|≤|R|
교차곱(=카티션 프로덕트, 크로스 조인) × R×S = {rs|r∈R∧s∈S} |R×S|=|R|×|S|

설명[편집 | 원본 편집]

DIVISION[편집 | 원본 편집]

DIVISION, 즉 DIVIDE 연산은 관계 대수(Relational Algebra)에서 특정 조건을 만족하는 모든 값을 가지는 튜플을 찾는 데 사용되는 연산이다. 특히, 이 연산은 "A가 B의 모든 조건을 만족하는가?"와 같은 상황을 처리하는 데 유용하다. 예를 들어, 모든 과목을 들은 학생이나 모든 상품을 구매한 고객을 찾는 문제에서 사용할 수 있다.

Divide 연산의 기본 개념

  • R ÷ S는 R의 속성 중 S의 속성들과 일치하는 속성들을 기준으로 나눈다는 의미이다.
  • R은 피제수(dividend)라고 하며, 이 관계는 전체 데이터가 포함되어 있다.
  • S는 제수(divisor)라고 하며, 이 관계는 조건을 나타낸다.
  • R ÷ S의 결과는 S에 있는 모든 값과 일치하는 R의 튜플들을 반환한다.

예시

  • R(학생 이름, 과목): 학생이 수강한 과목 정보 릴레이션
  • S(과목): 특정 과목들의 릴레이션 (예: {과목: 수학, 과학})
  • 우리는 S에 있는 모든 과목을 들은 학생들을 찾고자 한다.
R DIVIDED-BY S R÷S
학생 이름 과목
Alice 수학
Alice 영어
Bob 수학
Bob 과학
Charlie 수학
Charlie 영어
Charlie 과학
÷
과목
수학
영어
학생 이름
Alice
Charlie

집계 및 그룹 함수[편집 | 원본 편집]

Aggregate Functions and Grouping

원래 그룹핑과 집계는 관계 대수에서 지원되지 않는다. 하지만 DB에서 흔하게 사용되는 SUM, AVERAGE, MAXIMUM, MINIMUM, COUNT 등을 표현하기 위해 후대에 생겨났다. 표현법은 아래와 같다.

<그루핑 속성><집계 함수> (R)

예를 들어 SUM과 COUNT를 표현하려면 아래와 같이 할 수 있다.

SELECT SUM(RECORD) FROM EMP_PERFORM GROUP BY SSN -- 사람으로 묶여서 RECORD의 합을 구한다 SSNSUM RECORD (EMP_PERFORM)

SELECT COUNT(RECORD_NO) FROM EMP_PERFORM -- 특정 그룹핑 기준이 없을 경우 ℑ COUNT RECORD_NO (EMP_PERFORM)

현대 SQL에서의 GROUP BY와 같이 집계 결과와, 집계 기준이 되는 속성만 SELECT를 할 수 있다. 집계된 결과들은 그 자체로 속성 명이 없기 때문에 별도로 부여할 수 있다. 새롭게 정의하는 속성명으로 구성된 집합을 만드는 것이다.

ρR(Dno, No_of_employees, Average_sal) (DnoCOUNT Ssn, AVERAGE Salary (EMPLOYEE))

예시[편집 | 원본 편집]

아래 두 릴레이션을 사용하여 몇 가지 관계 대수 연산의 예를 살펴본다.

1. EMPLOYEE 테이블

Ssn Name Age Dept_no
123-45-6789 Alice 30 1
234-56-7890 Bob 40 2
345-67-8901 Charlie 35 1
456-78-9012 David 28 3
567-89-0123 Eva 50 2

2. DEPARTMENT 테이블

Dept_no Dept_name
1 HR
2 IT
3 Finance

예시 1: 선택 조건 (Selection)

조건: 나이가 30세 이상인 직원의 정보를 선택한다.

관계 대수:

σ(Age ≥ 30)(EMPLOYEE)

결과:

Ssn Name Age Dept_no
123-45-6789 Alice 30 1
234-56-7890 Bob 40 2
345-67-8901 Charlie 35 1
567-89-0123 Eva 50 2

예시 2: 속성 선택 (Projection)

  • 쿼리: 직원의 이름과 나이만 선택한다.
  • 관계 대수:

    π(Name, Age)(EMPLOYEE)

  • 결과:
Name Age
Alice 30
Bob 40
Charlie 35
David 28
Eva 50

예시 3: 선택 조건과 선택 속성 (Selection and Projection)

  • 쿼리: 나이가 40세 이상인 직원의 이름만 선택한다.
    • 조건을 먼저 정하고 선택된 결과 중 속성을 선택하는 것이 일반적이다.
  • 관계 대수:

    π(Name, Age)(Age ≥ 40)(EMPLOYEE))

  • 결과:
Name
Bob
Eva

예시 3: 조인 (Join)

  • 쿼리: 각 직원의 이름과 소속 부서 이름을 함께 출력한다.
  • 관계 대수:

    EMPLOYEE ⨝ (EMPLOYEE.Dept_no = DEPARTMENT.Dept_no) DEPARTMENT

  • 결과:
Ssn Name Age Dept_no Dept_name
123-45-6789 Alice 30 1 HR
234-56-7890 Bob 40 2 IT
345-67-8901 Charlie 35 1 HR
456-78-9012 David 28 3 Finance
567-89-0123 Eva 50 2 IT

관계대수와 관계해석 비교[편집 | 원본 편집]

구분 관계 대수 관계 해석
예시 δLev=4(EMP) EMP(t) and t.Lev>3 }
목적 어떻게(How) 무엇을(What)
기반 집합과 관계연산 프레디킷 논리
접근법 절차적 비절차적
관점 규범적 기술적
표현력 동일

같이 보기[편집 | 원본 편집]