T'SPACE

다채로운 에디터들의 이야기

컴퓨터공학/데이터베이스 DB

데이터베이스 Relational Algebra 관계 대수

Tonny Kang 2024. 10. 15. 08:55
반응형

관계형 쿼리 언어

데이터베이스에서 데이터를 조작하고 검색할 수 있게 해줍니다

관계 대수를 사용합니다

관계 대수

선언적(SQL) 쿼리를 정확하고 최적화 가능한 표현으로 변환할 수 있게 해줍니다

 

하나 또는 두 개의 관계를 입력으로 받아 새로운 관계를 생성하는 연산 집합입니다

  • 한 관계: 단항 연산
    • 선택, 투영, 이름 변경 등
  • 두 관계: 이항 연산
    • 카티션 곱, 집합 차이

  • 결과 관계의 스키마는 입력 관계와 쿼리에 의해 결정됩니다
  • 다른 쿼리의 입력으로 사용될 수 있습니다 → 서브쿼리 (Subquery)!

반응형

관계 대수 연산자


핵심 5가지 연산자


선택 σ Selection

선택 연산자 σ(시그마)는 입력 관계에서 유지할 행을 지정합니다

  • 조건은 부울 표현식입니다

투영 π Projection

투영 연산자 π(파이)는 입력 관계에서 유지할 열을 지정합니다

Selection과 Projection의 특성

  • 선택과 투영은 중복을 제거합니다

하지만 관계는 이미 집합 아닌가요?

  1. 투영은 열을 제거합니다 → 중복을 초래할 수 있습니다
  2. 실제로 데이터베이스 시스템은 bag semantics을 구현합니다 (↔ 집합 semantics)
    • 중복 제거는 시간이 많이 소요됩니다
  • 스키마
  • 선택이나 투영의 결과 스키마는 입력과 동일합니다
  • 교환 법칙

  • "firstName" 속성만 남기면 결과 관계에 "birth" 속성이 없어 선택을 수행할 수 없기 때문입니다 따라서 이와 같은 쿼리가 동등한 쿼리가 되어야 합니다
  • 그러면 둘이 같다면, 어느 쿼리가 더 좋을까요?
  • DBMS의 유형과 테이블 저장 전략에 따라 다릅니다
    • 행 지향 저장: Selection 먼저
    • 열 지향 저장: Projection 먼저
728x90

집합 연산자


op = () 합집합, () 교집합, (-) 차집합

  • A와 B는 호환 가능해야 합니다 → 같은 수의 필드(속성)
  • 각 관계 스키마의 i번째 필드는 같은 도메인과 이름을 가져야 합니다

차집합 Set Difference

대부분의 연산자는 단조증가입니다 → 입력의 크기가 증가하면 출력도 증가합니다

하지만! 차집합은 비단조적입니다

교집합

다른 핵심 연산자를 사용하여 표현할 수 있습니다

→ 교집합은 핵심 연산자가 아닙니다

카티션 곱 (교차 곱)

A가 m개의 레코드를 포함하고 B가 n개의 레코드를 포함한다면, R_결과는 m X n개의 레코드를 포함할 것입니다

추가 연산자


이름 변경 (ρ)

관계 대수 쿼리의 결과에 이름을 할당하는 것이 유용할 때가 있습니다

관계의 이름을 새 이름 s로 변경합니다

관계와 그 속성의 이름을 변경합니다

지정된 속성의 이름을 변경합니다

예시: 카티션 곱을 사용하여 최대값 찾기

계좌가 있다고 가정해 봅시다

Account={accNumber, type, balance, branchName}
  1. 다른 계좌보다 잔액이 적은 계좌 찾기

  1. 차집합을 사용하여 가장 큰 잔액을 가진 계좌 찾기

반응형