본문 바로가기
  • 시 쓰는 개발자
1일 1개념정리 (24년 8월~)/데이터베이스

1일1개 (32) - 관계 대수 (Relational Algebra)

by poetDeveloper 2024. 9. 11.

1일 1개념정리 24.08.09.금 ~ 

 

큰 결정에 큰 동기가 따르지 않을 때도 있다. 하지만 큰 결심이 따라야 이뤄낼 수 있다.

무조건 무조건 1일 1개의 개념 정리하기 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!


#32. 관계 대수 (Relational Algebra)

관계대수(Relational Algebra)는 무엇인가 ? DB를 공부하다 당황하는 포인트가 있는데, 바로 이 관계 대수 이다. 아니 공부하다가 갑자기 시그마 나오고 무슨 리본이(join) 나오고 그래서 매우 당황했다 .... 이번 기회에 알아보고 당황하지 말자 !!!

 

관계 대수

DB에서 관계형 데이터를 다루기 위한 "수학적 언어"로, SQL처럼 데이터를 조작하고 질의하는데 사용된다. 보통 기본 연산과 확장 연산 이렇게 나뉜다. 이게 또 다시 나뉘는데, 아래와 같다. 각각이 SQL에서 어떤 질의와 매칭되는지도 써놨으니 참고하자 !!

 

 

1. 기본 연산 (기본 관계 연산자)

  • 선택(Selection, σ) = Where : 조건에 맞는 튜플을 선택한다.
  • *투영(Projection, π) = Select : 필요한 속성(열)만을 선택한다.
  • 합집합(Union, ∪) = Union : 두 개의 릴레이션에서 중복을 제거하고 모든 튜플을 결합한다.
  • 차집합(Difference, - ) = Except 또는 Minus : 한 릴레이션에서 다른 릴레이션의 튜플을 뺀 나머지를 반환한다.
  • 교집합(Intersection, ∩) = Intersection : 두 릴레이션에서 공통된 튜플을 반환
  • 카티션 곱(Cartesian Product, ×) = Cross Join : 두 릴레이션의 모든 튜플을 조합하여 새로운 튜플을 만든다.

*투영 : 투영은 DB에서 테이블의 특정 열(속성)만 선택하는 연산이다. select할 때 필요한 열만 골라내는 것과 같다. 즉, 행 단위로 데이터 필터링 하는 게 아니고 열 단위로 데이터 필터링 하는 것임.

 

2. 확장 연산 (파생 연산자)

  • 조인(Join, ⨝) = Inner Join 또는 Outer Join : 두 릴레이션을 조건에 따라 결합한다. SQL에서 INNER JOIN이나 OUTER JOIN에 해당합니다.
  • 자연 조인(Natural Join, ⋈) : 동일한 속성을 기반으로 두 릴레이션을 결합하는 방식.
  • 디비전(Division, ÷) : A 릴레이션에서 B 릴레이션에 해당하는 항목을 모두 포함하는 튜플을 반환한다. 복잡한 서브쿼리와 비슷한 역할

 

 

관계대수를 왜 쓰는 거??

아니 직관적이고 친숙한 select, insert 이런거 냅두고 왜 이걸 쓰는겨 ?? 사실 이 둘은 좀 다른 맥락이다. 관계대수는 SQL의 이론적 기초로서, 데이터베이스 연산을 수학적으로 표현한 것이고, SQL은 이 개념을 바탕으로 구현된 실제 프로그래밍 언어이다. 이 둘을 비교해보자.

 

관계대수 = 절차적

 

  • 수학적 모델을 기반으로 하고 이론적인 데이터 연산을 정의
  • 데이터를 다루는 연산들의 집합으로, DB 엔진이 질의를 처리할 때 내부적으로 어떻게 연산이 이루어지는지를 설명
  • 절차적 언어로, 어떤 순서로 데이터를 처리해야 하는지를 명확하게 기술한다.

SQL = 비절차적

  • 실제로 데이터베이스에 질의하거나 데이터를 조작하기 위해 사용되는 비절차적 언어이다.
  • SQL에서는 "어떻게" 데이터를 처리할지보다는 "무엇을" 얻고 싶은지를 표현한다. 그래서 우린 쿼리문만 쓰면 결과가 띡 하고 나오길 원하지, 그 안에서 어떻게 처리하는진 관심 없다.
  • SQL은 관계대수에서 정의된 연산들을 실제로 구현한 것이며, 관계대수에서 논리적으로 가능하다고 증명된 연산들이 SQL 명령어로 변환되어 사용된다.

요약하면, 관계대수는 DB 쿼리를 수학적으로 설명하는 이론이고, SQL은 이를 실제로 구현한 언어이다.

 

사용 예시

SELECT name, age 
FROM employees 
WHERE department = 'IT';

 

이런 쿼리가 있다고 하자. 이를 관계 대수로 표현하면 어떻게 될까 ??

  1. 선택(σ) : 조건에 맞는 데이터를 먼저 선택한다. σ_department='IT'(employees)라고 하면 되겠지. 이렇게 쓰면 employees 테이블에서 department가 'IT'인 튜플을 선택한다.
  2. 투영(π) : 원하는 열만 선택한다. π_name, age(σ_department='IT'(employees))라고 하면 선택된 결과에서 name과 age 속성만 추출한다.

이렇듯 관계대수는 절차적 표현이다. 즉, (1)먼저 'IT' 부서에 해당하는 행을 선택한 후, (2)선택된 데이터에서 이름과 나이만 투영하는 식으로 논리적인 연산 순서를 명확히 정의한다.

'1일 1개념정리 (24년 8월~) > 데이터베이스' 카테고리의 다른 글

1일1개 (30) - Redis  (0) 2024.09.09
1일1개 (26) - 몽고DB  (0) 2024.09.05
1일1개 (23) - 정규화  (0) 2024.09.01
1일1개 (13) - Elastic Search  (0) 2024.08.21
1일1개 (7) - PostgreSQL  (0) 2024.08.15